我正尝试添加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
不起作用,我也不知道我在这里缺少什么。
谢谢您的回答。
答案 0 :(得分:0)
首先,当您为CAGradientLayer
设置颜色时,应仅使用CGColor
对象。因此,您需要将该行更改为
gradient.colors = [UIColor.clear.cgColor, UIColor.black.cgColor]
此后,您的tabImage
将不会为空并且变得可见。
最后一个问题是,您始终将图像尺寸设置为1000x1000
像素。太过分了。要解决此问题,您可以将目标帧大小作为参数传递给createImageFromLayer
。它的签名将变成这样。
func createImageFromLayer(targetFrame: CGRect) -> UIImage?
在您的情况下,targetFrame
是tabBar.bounds
。