为有牺牲多壮志,敢教日月换新天。

[Xcode 实际操作]九、实用进阶-(20)创建位移关键帧动画:通过添加运动关键点制作位移动画

热烈欢迎,请直接点击!!!

进入博主App Store主页,下载使用各个作品!!!

注:博主将坚持每月上线一个新app!!!

目录:[Swift]Xcode实际操作

本文将演示如何通过添加运动关键点的方式,来制作位移动画

在项目导航区,打开视图控制器的代码文件【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  }

留意动画速度的变化。

posted @ 2018-12-09 17:23  为敢技术  阅读(221)  评论(0编辑  收藏  举报