什么是 CALayer 和 CAGradientLayer?
What is CALayer and CAGradientLayer?
任何人都可以用简单的语言解释什么是 CALayer 和 CAGradientLayer 以及如何以编程方式实现以下渐变。
我想以编程方式实现这种渐变颜色:
我建议您搜索 CALayer
和 CAGradientLayer
并仔细阅读它们是什么以及如何使用它们。
但是,对于一个非常简单的例子...
A CAGradientLayer
使用一组颜色(CGColor
类型),结合一组位置(颜色应更改的百分比)以及起点和终点。
因此,要获得颜色渐变,您需要一组颜色:
[.purple, .blue, .green, .yellow, .red]
位置数组:
[0.0, 0.2, 0.4, 0.6, 1.0]
并且您想从顶部开始并在底部结束:
gradLayer.startPoint = CGPoint(x: 0.5, y: 0.0)
gradLayer.endPoint = CGPoint(x: 0.5, y: 1.0)
这是一个简单的例子:
class ViewController: UIViewController {
let gradLayer = CAGradientLayer()
override func viewDidLoad() {
super.viewDidLoad()
let myColors: [UIColor] = [.purple, .blue, .green, .yellow, .red]
// assign the colors (we're using map to convert UIColors to CGColors)
gradLayer.colors = myColors.map({[=13=].cgColor})
// locations can be considered Percentages
// so, 0.2 is 20%, 0.4 is 40%, etc
gradLayer.locations = [0.0, 0.2, 0.4, 0.6, 1.0]
// start at the top
gradLayer.startPoint = CGPoint(x: 0.5, y: 0.0)
// end at the bottom
gradLayer.endPoint = CGPoint(x: 0.5, y: 1.0)
view.layer.addSublayer(gradLayer)
}
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
// layers do not auto-size, so update the frame
gradLayer.frame = view.bounds
}
}
结果:
玩转位置和颜色以查看差异。
任何人都可以用简单的语言解释什么是 CALayer 和 CAGradientLayer 以及如何以编程方式实现以下渐变。
我想以编程方式实现这种渐变颜色:
我建议您搜索 CALayer
和 CAGradientLayer
并仔细阅读它们是什么以及如何使用它们。
但是,对于一个非常简单的例子...
A CAGradientLayer
使用一组颜色(CGColor
类型),结合一组位置(颜色应更改的百分比)以及起点和终点。
因此,要获得颜色渐变,您需要一组颜色:
[.purple, .blue, .green, .yellow, .red]
位置数组:
[0.0, 0.2, 0.4, 0.6, 1.0]
并且您想从顶部开始并在底部结束:
gradLayer.startPoint = CGPoint(x: 0.5, y: 0.0)
gradLayer.endPoint = CGPoint(x: 0.5, y: 1.0)
这是一个简单的例子:
class ViewController: UIViewController {
let gradLayer = CAGradientLayer()
override func viewDidLoad() {
super.viewDidLoad()
let myColors: [UIColor] = [.purple, .blue, .green, .yellow, .red]
// assign the colors (we're using map to convert UIColors to CGColors)
gradLayer.colors = myColors.map({[=13=].cgColor})
// locations can be considered Percentages
// so, 0.2 is 20%, 0.4 is 40%, etc
gradLayer.locations = [0.0, 0.2, 0.4, 0.6, 1.0]
// start at the top
gradLayer.startPoint = CGPoint(x: 0.5, y: 0.0)
// end at the bottom
gradLayer.endPoint = CGPoint(x: 0.5, y: 1.0)
view.layer.addSublayer(gradLayer)
}
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
// layers do not auto-size, so update the frame
gradLayer.frame = view.bounds
}
}
结果:
玩转位置和颜色以查看差异。