【问题标题】:What is CALayer and CAGradientLayer?什么是 CALayer 和 CAGradientLayer?
【发布时间】:2020-12-28 22:07:52
【问题描述】:

谁能用简单的语言解释一下什么是 CALayer 和 CAGradientLayer 以及如何以编程方式实现以下渐变。

我想以编程方式实现这种渐变色:

【问题讨论】:

    标签: animation storyboard calayer swift5 xcode11


    【解决方案1】:

    我建议您搜索 CALayerCAGradientLayer 并阅读它们是什么以及如何使用它们。

    不过,举个非常简单的例子……

    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({$0.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
        }
    
    }
    

    结果:

    使用位置和颜色来查看差异。

    【讨论】:

    • 嘿@DonMag 谢谢你的回答,你能不能也谈谈那个 viewDidLayoutSubviews() 函数,比如它什么时候被调用,被调用了多少次?
    • @YuvrajAgarkar - 这是基本的 iOS 开发。最好的办法是阅读文档。
    猜你喜欢
    • 1970-01-01
    • 2013-03-12
    • 2010-11-13
    • 2011-12-11
    • 1970-01-01
    • 1970-01-01
    • 2015-11-01
    • 2012-06-04
    相关资源
    最近更新 更多