我正在尝试添加一个UIImage
来定制我的tabBar
,就像我对我的navigationBar
一样,但它似乎不起作用。
首先,我创建一个CAGradientLayer
然后我把它变成UIImage
。这是代码:
extension CALayer {
func createImageFromLayer() -> UIImage?{
frame = CGRect(x: 0, y: 0, width: 1000, height: 1000)
UIGraphicsBeginImageContext(frame.size)
guard let context = UIGraphicsGetCurrentContext() else {return nil}
render(in: context)
let output = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return output
}
}
class CustomTabBarController: UITabBarController {
let grad: CAGradientLayer = {
let gradient = CAGradientLayer()
gradient.colors = [UIColor.clear, UIColor.black]
gradient.locations = [0,1]
return gradient
}()
override func viewDidLoad() {
super.viewDidLoad()
let tabImage = grad.createImageFromLayer()
self.tabBar.isTranslucent = true
self.tabBar.backgroundImage = tabImage
self.tabBar.shadowImage = UIImage()
}
}
为我的navigationBar
设置图像完美地使用此方法:
navigationController?.navigationBar.setBackgroundImage(barImg, for: UIBarMetrics.default)
在这个代码中,barImg
是UIImage
,它是用CAGradientLayer
创建的,就像tabBar
一样。我检查了tabImage
是否是nil
而事实并非如此。
似乎tabBar
没有像tabBar.setBackgroundImage
这样的navigationBar
这样的功能。我该怎么做呢?
我获得的唯一结果是我的tabBar
完全清晰的背景,没有添加渐变,我不知道我在这里缺少tabBar.backgroundImage
不起作用。
谢谢你的答案。
首先,当你为CAGradientLayer
设置颜色时,你应该只使用CGColor
对象。所以你需要改变那一行
gradient.colors = [UIColor.clear.cgColor, UIColor.black.cgColor]
之后你的tabImage
将不会是空的并且变得可见。
最后一个问题是您始终将图像大小设置为1000x1000
像素。这太过分了。要解决此问题,您可以将目标帧大小作为参数传递给createImageFromLayer
。它的签名将变成这样的东西。
func createImageFromLayer(targetFrame: CGRect) -> UIImage?
在你的情况下targetFrame
是tabBar.bounds
。