[Xcode 實際操做]9、實用進階-(20)建立位移關鍵幀動畫:經過添加運動關鍵點製做位移動畫

目錄:[Swift]Xcode實際操做html

本文將演示如何經過添加運動關鍵點的方式,來製做位移動畫swift

在項目導航區,打開視圖控制器的代碼文件【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  }

留意動畫速度的變化。ide

相關文章
相關標籤/搜索