CABasicAnimation属性动画的基本用法

---恢复内容开始---

初始化一个按钮

lazy var loginButton = UIButton()  //懒加载属性
//设置 loginButton 按钮属性
func  setupUI() {
        loginButton.frame =  CGRect(x: 20, y: 230,  view.frame.width - 20 * 2, height: 30)
        loginButton.backgroundColor = UIColor.cyan
        loginButton.setTitle("登录", for: [])
        view.addSubview(loginButton)
}

 CABasicAnimation属性动画的基本用法

添加一个位置动画

let animation = CABasicAnimation() // 属性
/// MARK: - 位置动画
func positionAnimation() { animation.keyPath = "position" //设置动画实例对象的效果
        
        let positionX = loginButton.frame.origin.x + 0.5 * loginButton.frame.size.width
        
        let positionY = loginButton.frame.origin.y + 0.5 * loginButton.frame.size.height + 100
        
        /// 使loginButton 按钮向下平移100
        animation.toValue = NSValue(cgPoint: CGPoint(x: positionX, y: positionY))

        animation.duration = 2.0  //动画执行周期

        /// 保持动画结束之后的状态
        animation.fillMode = kCAFillModeForwards
        animation.isRemovedOnCompletion = false
        
        loginButton.layer.add(animation, forKey: nil) //添加动画到layer层 }

 添加一个缩放动画

func scaleAnimation() {

        animation.keyPath = "transform.scale.x" //设置动画实例对象的效果
    
        animation.fromValue = 1.0
        animation.toValue = 0.8
        
        animation.duration = 2.0  //动画执行周期
        
        //保持动画结束之后的状态
        animation.fillMode = kCAFillModeForwards
        animation.isRemovedOnCompletion = false
        
        loginButton.layer.add(animation, forKey: nil) //添加动画到layer层
        
    }

添加一个旋转动画

func rotationAnimation() {
        
        animation.keyPath = "transform.rotation" //设置动画实例对象的效果
        
        animation.toValue = 3.14 / 2  //旋转角度,可以使用 M_PI之类的
        
        animation.duration = 2.0  //动画执行周期
        
        //保持动画结束之后的状态
        animation.fillMode = kCAFillModeForwards
        animation.isRemovedOnCompletion = false
        
        loginButton.layer.add(animation, forKey: nil) //添加动画到layer层
        
    }

添加一个淡入淡出动画

func opacityAnimation() {
        // Opacity 属性和alpha属性类似,通过设置 0~1.0的浮点数字可以实现透明效果,默认值为0,表示初试状态为隐藏
        animation.keyPath = "opacity" //设置动画实例对象的效果
        
        animation.fromValue = UIColor.cyan.cgColor
        
        animation.toValue = 1.0
        
        animation.duration = 5.0  //动画执行周期
        
        //保持动画结束之后的状态
        animation.fillMode = kCAFillModeForwards
        animation.isRemovedOnCompletion = false
        
        loginButton.layer.add(animation, forKey: nil) //添加动画到layer层
        
    }

 添加一个阴影渐变动画

func shadowOpacityAnimation() {
        
        //阴影渐变
        loginButton.layer.shadowColor = UIColor.red.cgColor
        loginButton.layer.shadowOpacity = 0.5
        
        animation.keyPath = "shadowOffset" //设置动画实例对象的效果
        
        animation.toValue = NSValue(cgSize: CGSize( 0, height: 3))
        
        animation.duration = 2.0  //动画执行周期
        
        //保持动画结束之后的状态
        animation.fillMode = kCAFillModeForwards
        animation.isRemovedOnCompletion = false
        
        loginButton.layer.add(animation, forKey: nil) //添加动画到layer层
        
    }

以上只是部分使用部分属性完成了最基本的属性动画,当然还有更多的属性 比如颜色,边框,圆角等等属性可以使用,最主要的就是通过改变keyPath来实现,就不一一作介绍了。