[Xcode 实际操作]九、实用进阶-(20)创建位移关键帧动画:通过添加运动关键点制作位移动画
本文将演示如何通过添加运动关键点的方式,来制作位移动画
在项目导航区,打开视图控制器的代码文件【ViewController.swift】
1 import UIKit 2 3 //添加一个代理协议CAAnimationDelegate 4 class ViewController: UIViewController, CAAnimationDelegate { 5 6 override func viewDidLoad() { 7 super.viewDidLoad() 8 // Do any additional setup after loading the view, typically from a nib. 9 10 //创建一个图像视图,并设置位置在(40,80),尺寸为(64,64) 11 let imageView = UIImageView(frame: CGRect(x: 40, y: 80, width: 64, height: 64)) 12 //从项目资源文件夹加载资源,并赋予图像视图 13 imageView.image = UIImage(named: "star") 14 //将图像视图,添加到当前视图控制器的根视图 15 self.view.addSubview(imageView) 16 17 //初始化一个关键帧动画对象, 18 //该对象提供了对对关键帧动画的支持 19 //可以为层属性指定关键路径,使其产生相应的动画 20 let animation = CAKeyframeAnimation(keyPath: "position") 21 22 //添加一个路径上的四个关键锚点 23 let point1 = CGPoint(x: 40, y: 80) 24 let point2 = CGPoint(x: 280, y: 80) 25 let point3 = CGPoint(x: 60, y: 300) 26 let point4 = CGPoint(x: 280, y: 300) 27 28 //创建帧动画的值数组,在动画运行的时候, 29 //数组中的每个值,就会被轮流进行插值使用 30 animation.values = [NSValue(cgPoint: point1), NSValue(cgPoint: point2), 31 NSValue(cgPoint: point3), NSValue(cgPoint: point4)] 32 //再创建一个数组,存储帧动画的关键时间点 33 animation.keyTimes = [NSNumber(value: 0.0), NSNumber(value: 0.4), 34 NSNumber(value: 0.6), NSNumber(value: 1.0)] 35 36 //设置关键帧动画的代理对象,为当前视图控制器 37 animation.delegate = self 38 //设置关键帧动画时长为5秒钟 39 animation.duration = 5.0 40 41 //给图像视图的层,添加关键帧动画,开始动画的播放 42 imageView.layer.add(animation, forKey: "Move") 43 } 44 45 //添加一个代理方法,用来响应动画开始的事件 46 func animationDidStart(_ anim: CAAnimation) { 47 //在控制台打印输出日志 48 print("The animation starts") 49 } 50 51 //添加一个代理方法,用来响应动画结束的事件 52 func animationDidStop(_ anim: CAAnimation, finished flag: Bool) { 53 //在控制台打印输出日志 54 print("End of the animation") 55 } 56 57 override func didReceiveMemoryWarning() { 58 super.didReceiveMemoryWarning() 59 // Dispose of any resources that can be recreated. 60 } 61 }
留意动画速度的变化。