[Xcode10 實際操作]六、媒體與動畫-(12)檢測UIView動畫的結束事件:反轉動畫並縮小至不可見狀態
阿新 • • 發佈:2018-11-29
本文將演示UIView檢視反轉動畫的製作,並檢測其動畫結束事件。
即檢視在進行反轉動畫的同時,將移動到目標位置,並縮小至不可見狀態。
在專案導航區,開啟檢視控制器的程式碼檔案【ViewController.swift】
1 import UIKit 2 3 class ViewController: UIViewController { 4 5 override func viewDidLoad() { 6 super.viewDidLoad() 7 // Do any additional setup after loading the view, typically from a nib.8 9 //建立一個位置在(50,50),尺寸為(220,320)的顯示區域 10 let rect = CGRect(x: 50, y: 50, width: 220, height: 320) 11 //初始化一個影象檢視,並設定其位置和尺寸資訊 12 let imageView = UIImageView(frame: rect) 13 14 //從專案資原始檔中載入一張圖片 15 let image = UIImage(named: "Picture") 16 //給影象檢視指定需要顯示的圖片17 imageView.image = image 18 //設定影象檢視的標識值,以方便後期對影象檢視的呼叫 19 imageView.tag = 1 20 21 //將影象檢視,新增到當時檢視控制器的根檢視 22 self.view.addSubview(imageView) 23 24 //初始化一個按鈕物件,當點選按鈕時,開始播放動畫 25 let button = UIButton(type: UIButton.ButtonType.system)26 //設定按鈕物件的位置為(50,400),尺寸為(220,44) 27 button.frame = CGRect(x: 50, y: 400, width: 220, height: 44) 28 //設定按鈕物件的背景顏色為橙色 29 button.backgroundColor = UIColor.orange 30 //設定按鈕物件的標題文字 31 button.setTitle("Tap it", for: .normal) 32 //給按鈕物件,繫結點選事件 33 button.addTarget(self, action: #selector(ViewController.playAnimation), for: UIControl.Event.touchUpInside) 34 35 //將按鈕物件,新增到當前檢視控制器的根檢視 36 self.view.addSubview(button) 37 } 38 39 //建立一個方法,用來響應按鈕的點選事件 40 @objc func playAnimation() 41 { 42 //發出開始動畫的請求, 43 //標誌著檢視動畫塊的開始。 44 //在它和提交動畫請求之間,可以定義動畫的各種展現方式 45 UIView.beginAnimations(nil, context: nil) 46 //設定動畫的播放速度為淡入淡出 47 UIView.setAnimationCurve(.easeInOut) 48 //設定動畫的時長為5秒 49 UIView.setAnimationDuration(5) 50 //設定動畫從檢視當前狀態開始播放 51 UIView.setAnimationBeginsFromCurrentState(true) 52 53 //通過標識值,找到上方程式碼種建立的影象檢視作為動畫的載體 54 let view = self.view.viewWithTag(1) 55 //設定動畫型別為翻轉動畫 56 UIView.setAnimationTransition(.flipFromRight, for: view!, cache: true) 57 //設定檢視的目標位置為(50,50),目標尺寸為(0,0)。 58 //即檢視在進行反轉動畫的同時,將移動到目標位置,並縮小至不可見狀態 59 view?.frame = CGRect(x: 50, y: 50, width: 0, height: 0) 60 61 //同時設定動畫的代理物件,為當前的檢視控制器 62 UIView.setAnimationDelegate(self) 63 //當動畫結束後,在控制檯列印輸出日誌 64 //設定動畫結束時執行的方法 65 UIView.setAnimationDidStop(#selector(ViewController.animationStop)) 66 //呼叫檢視的提交動畫方法,標誌著動畫塊的結束 67 UIView.commitAnimations() 68 } 69 70 //建立一個方法,用來響應動畫結束事件 71 @objc func animationStop() 72 { 73 //當動畫結束後,在控制檯列印輸出日誌 74 print("Animaton stop.") 75 //同時將影象檢視,從父檢視種移除 76 self.view.viewWithTag(1)?.removeFromSuperview() 77 } 78 79 override func didReceiveMemoryWarning() { 80 super.didReceiveMemoryWarning() 81 // Dispose of any resources that can be recreated. 82 } 83 }