为什么我的UIImage不会出现在我的tabBar中?

问题描述 投票:1回答:1

我正在尝试添加一个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)

在这个代码中,barImgUIImage,它是用CAGradientLayer创建的,就像tabBar一样。我检查了tabImage是否是nil而事实并非如此。

似乎tabBar没有像tabBar.setBackgroundImage这样的navigationBar这样的功能。我该怎么做呢?

我获得的唯一结果是我的tabBar完全清晰的背景,没有添加渐变,我不知道我在这里缺少tabBar.backgroundImage不起作用。

谢谢你的答案。

swift xcode uitabbar
1个回答
0
投票

首先,当你为CAGradientLayer设置颜色时,你应该只使用CGColor对象。所以你需要改变那一行

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

之后你的tabImage将不会是空的并且变得可见。

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

func createImageFromLayer(targetFrame: CGRect) -> UIImage?

在你的情况下targetFrametabBar.bounds

© www.soinside.com 2019 - 2024. All rights reserved.