[Xcode10 实际操作]六、媒体与动画-(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 }

猜你喜欢

转载自www.cnblogs.com/strengthen/p/10036241.html