首页 > 解决方案 > UIView 渐变作为多次应用的扩展

问题描述

我有一个扩展来为视图添加渐变。

    func applyLinearGradient(firstColor: UIColor, secondColor: UIColor, startPoint: CGPoint, endpoint: CGPoint, locations: [NSNumber]) {
        let gradientLayer = CAGradientLayer()
        gradientLayer.colors = [firstColor.cgColor, secondColor.cgColor]
        gradientLayer.startPoint = startPoint
        gradientLayer.endPoint = endpoint
        gradientLayer.locations = locations
        gradientLayer.frame = bounds
        
        layer.insertSublayer(gradientLayer, at: 0)
    }
    @IBOutlet weak var titleView: UIView!
    @IBOutlet weak var titleTxt: UILabel!
    
    ...

    override func viewDidLayoutSubviews() {
        super.viewDidLayoutSubviews()
        
        //add gradient under the title
        titleView.applyLinearGradient(firstColor: UIColor(named: "PrimaryColor") ?? UIColor.clear, secondColor: UIColor.clear, startPoint: CGPoint(x: 0.5, y: 1.0), endpoint: CGPoint(x: 0.5, y: 0.0), locations: [0, 1])
    }

问题是当我调用它时,viewDidLayoutSubviews它被应用了 2 次。 在此处输入图像描述

我可以创建一个从 uiview 扩展的渐变视图,但是是否可以仅使用扩展来使其工作?

我正在使用故事板。

标签: iosswiftuikit

解决方案


推荐阅读