如何在运行时更改渐变图层的框架?

3
当我运行应用程序时,渐变层框架与UIView框架不匹配。我尝试了以下代码:
let color1  =  UIColor(red: 20.0/255, green: 43.0/255, blue: 81.0/255, alpha: 1.0).cgColor
let color2  =  UIColor(red: 149.0/255, green: 45.0/255, blue: 122.0/255, alpha: 1.0).cgColor

let gradientLayer = CAGradientLayer()
gradientLayer.frame = self.backBarcodeSrch.bounds
gradientLayer.colors =  [color1,color2 ]
gradientLayer.locations = [0.0, 1.0]

gradientLayer.startPoint = CGPoint(x: 0.0, y: 0.6)
gradientLayer.endPoint = CGPoint(x: 1.0, y: 0.6)
self.backBarcodeSrch.layer.addSublayer(gradientLayer)

1
你只需要将上述代码粘贴到viewDidLayoutSubviews()方法中,并请确保只添加一次渐变层。 - Hitesh Surani
2个回答

6
在你的ViewController中的viewDidLayoutSubviews()方法中更新gradientLayerframe
class VC: UIViewController {
    var gradientLayer = CAGradientLayer()

    override func viewDidLayoutSubviews() {
        super.viewDidLayoutSubviews()
        gradientLayer.frame = self.backBarcodeSrch.bounds
    }

    override func viewDidLoad() {
        super.viewDidLoad()
        self.addGradient()
    }

    func addGradient() {
        let color1  =  UIColor(red: 20.0/255, green: 43.0/255, blue: 81.0/255, alpha: 1.0).cgColor
        let color2  =  UIColor(red: 149.0/255, green: 45.0/255, blue: 122.0/255, alpha: 1.0).cgColor

        gradientLayer.frame = self.backBarcodeSrch.bounds
        gradientLayer.colors =  [color1,color2 ]
        gradientLayer.locations = [0.0, 1.0]

        gradientLayer.startPoint = CGPoint(x: 0.0, y: 0.6)
        gradientLayer.endPoint = CGPoint(x: 1.0, y: 0.6)
        self.backBarcodeSrch.layer.addSublayer(gradientLayer)
    }
}

1
我们不需要在以下代码中使用'var':
var gradientLayer = CAGradientLayer()
因为我们不会改变对CAGradientLayer对象的引用,所以最好使用"let"。
- AlexM

0

尝试这个:

func addGradientLayer() {
let color1  =  UIColor(red: 20.0/255, green: 43.0/255, blue: 81.0/255, alpha:1.0).cgColor
let color2  =  UIColor(red: 149.0/255, green: 45.0/255, blue: 122.0/255, alpha: 1.0).cgColor

let gradientLayer = CAGradientLayer()
gradientLayer.frame = self.backBarcodeSrch.bounds
gradientLayer.colors =  [color1,color2 ]
gradientLayer.locations = [0.0, 1.0]

gradientLayer.startPoint = CGPoint(x: 0.0, y: 0.6)
gradientLayer.endPoint = CGPoint(x: 1.0, y: 0.6)
self.backBarcodeSrch.layer.addSublayer(gradientLayer)

}

override func viewDidLayoutSubviews() {
addGradientLayer()
}

它多次创建一个新的CAGradientLayer - RajeshKumar R

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接