---恢复内容开始---
初始化一个按钮
lazy var loginButton = UIButton() //懒加载属性 //设置 loginButton 按钮属性 func setupUI() { loginButton.frame = CGRect(x: 20, y: 230, width: view.frame.width - 20 * 2, height: 30) loginButton.backgroundColor = UIColor.cyan loginButton.setTitle("登录", for: []) view.addSubview(loginButton) }
添加一个位置动画
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(width: 0, height: 3)) animation.duration = 2.0 //动画执行周期 //保持动画结束之后的状态 animation.fillMode = kCAFillModeForwards animation.isRemovedOnCompletion = false loginButton.layer.add(animation, forKey: nil) //添加动画到layer层 }
以上只是部分使用部分属性完成了最基本的属性动画,当然还有更多的属性 比如颜色,边框,圆角等等属性可以使用,最主要的就是通过改变keyPath来实现,就不一一作介绍了。