swift渐变色

本文内容来源于http://www.hangge.com/,仅作学习记录...
需求:视图由上至下出现渐变色,点击视图更换另一组颜色,有过渡动画效果。
代码如下,有注释

import UIKit

class ViewController: UIViewController,CAAnimationDelegate {
    
    //渐变色
    let colorsSet = [
        [UIColor.yellow.cgColor,UIColor.orange.cgColor],
        [UIColor.cyan.cgColor,UIColor.green.cgColor],
        [UIColor.magenta.cgColor,UIColor.blue.cgColor]
    ]
    
    //当前渐变色索引
    var currentIndex = 0
    
    var gradientLayer : CAGradientLayer!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
        
        //监听单击事件,每单击一次就切换一组渐变色
        let tapSingle = UITapGestureRecognizer(target:self,action:#selector(tapSingleDid))
        tapSingle.numberOfTapsRequired = 1
        tapSingle.numberOfTouchesRequired = 1
        self.view .addGestureRecognizer(tapSingle)
        
        //初始化CAGradientLayer对象
        gradientLayer = CAGradientLayer()
        gradientLayer.colors = colorsSet.first
        gradientLayer.locations = [0.0,1.0]
        
        gradientLayer.frame = self.view.bounds
        self.view.layer.insertSublayer(gradientLayer, at: 0)
    }
    
    @objc func tapSingleDid() {
        var nextIndex = currentIndex + 1
        if nextIndex >= colorsSet.count {
            nextIndex = 0
        }
        
        //添加渐变色动画
        let colorChangeAnimation = CABasicAnimation(keyPath:"colors") //keyPath 小写 k
        colorChangeAnimation.delegate = self
        colorChangeAnimation.duration = 2.0
        colorChangeAnimation.fromValue = colorsSet[currentIndex]
        colorChangeAnimation.toValue = colorsSet[nextIndex]
        colorChangeAnimation.fillMode = kCAFillModeForwards
        //动画结束后保持最终的效果
        colorChangeAnimation.isRemovedOnCompletion = false;
        gradientLayer.add(colorChangeAnimation, forKey: "colors")
        
        currentIndex = nextIndex
    }
}

你可能感兴趣的:(swift渐变色)