原因
view.layer.insertSublayer(gradientLayer, at: 0)
将始终在索引0处插入渐变图层 . 最初,您创建了一个黑白颜色的图层并添加到位置0.现在,当用户选择新颜色时,您创建一个新图层并添加索引0,使黑白图层成为因此,只有黑色和白色层才会出现
Solution:
删除旧图层并添加新图层 .
Step 1:
将gradientLayer声明为实例变量
class ViewController: UIViewController {
var gradientLayer = CAGradientLayer()
....
}
Step 2:
在IBAction中删除旧图层并添加新图层
@IBAction func upperColorPicked(_ sender: UIButton) {
self.gradientLayer.removeFromSuperlayer()
currentUpperColor = sender.backgroundColor!
setGradientBackground(lowerColor: currentLowerColor, upperColor: currentUpperColor)
}
@IBAction func lowerColorPicked(_ sender: UIButton) {
self.gradientLayer.removeFromSuperlayer()
currentLowerColor = sender.backgroundColor!
setGradientBackground(lowerColor: currentLowerColor, upperColor: currentUpperColor)
}
Solution 2:(Not the preferred one)
如果你想叠加不同颜色的图层(我个人没有看到任何理由这样做,但如果那就是你想要的那样)你可以使用
view.layer.insertSublayer(CALayer(), at: UInt32(view.layer.sublayers?.count ?? 0))
所以修改 setGradientBackground 为
func setGradientBackground(lowerColor: UIColor, upperColor: UIColor) {
let gradientLayer = CAGradientLayer()
gradientLayer.frame = view.bounds
gradientLayer.colors = [lowerColor.cgColor, upperColor.cgColor]
gradientLayer.locations = [0.5, 1.0]
gradientLayer.startPoint = CGPoint(x: 0.0, y: 1.0)
gradientLayer.endPoint = CGPoint(x: 0.0, y: 0.0)
view.layer.insertSublayer(CALayer(), at: UInt32(view.layer.sublayers?.count ?? 0))
}