为什么我的UIImage没有出现在我的tabBar中?

时间:2018-09-08 18:45:23

标签: swift xcode uitabbar

我正尝试添加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不起作用,我也不知道我在这里缺少什么。

谢谢您的回答。

1 个答案:

答案 0 :(得分:0)

首先,当您为CAGradientLayer设置颜色时,应仅使用CGColor对象。因此,您需要将该行更改为

gradient.colors = [UIColor.clear.cgColor, UIColor.black.cgColor]

此后,您的tabImage将不会为空并且变得可见。

最后一个问题是,您始终将图像尺寸设置为1000x1000像素。太过分了。要解决此问题,您可以将目标帧大小作为参数传递给createImageFromLayer。它的签名将变成这样。

func createImageFromLayer(targetFrame: CGRect) -> UIImage?

在您的情况下,targetFrametabBar.bounds