[Xcode 实际操作]六、媒体与动画-(12)检测UIView动画的结束事件:反转动画并缩小至不可见状态
本文将演示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 }