微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Swift - 动画效果的实现方法总结附样例

在iOS中,实现动画有两种方法一个是统一的animateWithDuration,另一个是组合出现的beginAnimations和commitAnimations。这三个方法都是类方法

一,使用animateWithDuration来实现动画
(1)此方法共有5个参数:
  • duration:动画从开始到结束的持续时间,单位是秒
  • delay:动画开始前等待的时间
  • options:动画执行的选项。里面可以设置动画的效果。可以使用UIViewAnimationoptions类提供的各种预置效果
  • anmations:动画效果代码
  • completion:动画执行完毕后执行代码
(2)UIView支持动画效果属性
  • frame:此属性包含一个矩形,即边框矩形,此值确定了当前视图在其父视图坐标系中的位置与尺寸
  • bounds:也是矩形,边界矩形,它指的是视图在其自己的坐标系中的位置和尺寸,左上角坐标永远是(0,0)
  • center:确定视图的中心点在其父视图坐标系中的位置坐标。即定义当前视图在父视图中的位置
  • alpha:视图的透明度。(但视图完全透明时,不能响应触摸消息)
  • backgroundColor:背景色
  • transform:这是一种3×3的变化矩阵。通过这个矩阵我们可以对一个坐标系统进行缩放、平移、旋转以及这两者的任意组操作。
(3)Transform(变化矩阵)的四个常用的变换方法
  • CGAffineTransformMake():返回变换矩阵
  • CGAffineTransformMakeTranslation():返回平移变换矩阵
  • CGAffineTransformMakeScale():返回缩放变换矩阵
  • CGAffineTransformMakeRotation():返回旋转变换矩阵
(4)样例1:方块初始缩小为原始尺寸1/10。在1秒的动画中复原到完整大小,同时还伴随旋转效果
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
import UIKit
class ViewController : UIViewController {
//游戏方格维度
var dimension: Int = 4
//数字格子的宽度
width: CGFloat = 50
//格子与格子的间距
padding: = 6
//保存背景图数据
backgrounds: Array < UIView >!
override func viewDidLoad()
{
super .viewDidLoad()
self .backgrounds = >()
setupGameMap()
playAnimation()
}
setupGameMap()
{
x: = 50
y: = 150
for i in 0..<dimension
{
print (i)
y = 150
_ 0..<dimension
{
//初始化视图
let background = (frame: CGRectMake (x,y,width,width))
background.backgroundColor = UIColor .darkGrayColor()
.view.addSubview(background)
//将视图保存起来,以备后用
backgrounds.append(background)
y += padding + width
}
x += padding+width
}
}
playAnimation()
{
tile backgrounds{
//先将数字块大小置为原始尺寸的 1/10
tile.layer.setAffineTransform( CGAffineTransformMakeScale (0.1,0.1))
//设置动画效果,动画时间长度 1 秒。
.animateWithDuration(1,delay:0.01,
options: UIViewAnimationoptions . TransitionNone ,animations:
{
()-> Void in
//在动画中,数字块有一个角度的旋转。
CGAffineTransformMakeRotation (90))
},
completion:{
(finished: Bool ) -> in
in
//完成动画时,数字块复原
CGAffineTransformIdentity )
})
})
}
}
didReceiveMemoryWarning() {
.didReceiveMemoryWarning()
}
}

(5)样例2:只有从小变大的效果
22
playAnimation()
{
backgrounds{
//先将数字块大小置为原始尺寸的 1/10
//设置动画效果,动画时间长度 1 秒。
{
in
(1,1))
completion:{
in
.animateWithDuration(0.08,animations:{
in
)
})
})
}

(6)样例3:方块从不透明到透明的效果
20
tile.alpha = 0;
//设置动画效果,动画时间长度 1 秒。
CurveEaseInOut ottom:auto!important; float:none!important; height:auto!important; left:auto!important; line-height:1.5em!important; margin:0px!important; overflow:visible!important; padding:1px 0px!important; position:static!important; right:auto!important; top:auto!important; vertical-align:baseline!important; width:auto!important; font-family:Consolas,animations:
{
in
completion:{
in
tile.alpha = 1
})
})
}
}

二,使用beginAnimations和commitAnimations方法来实现动画
  • beginAnimations:此方法开始一个动画块,调用commitAnimations结束一个动画块,并且动画块是允许嵌套的。
  • commitAnimations:此方法用于结束一个动画块,动画是在一个独立的线程中运行的,动画在生效时,所有应用程序不会中断。
在beginAnimations和commitAnimations中间的代码中,我们可以设置各种动画的属性。比如持续时间,使用哪种预置的动画效果等。

(1)淡入,淡出,移动,改变大小动画
24
//淡出动画
.beginAnimations( nil ottom:auto!important; float:none!important; height:auto!important; left:auto!important; line-height:1.5em!important; margin:0px!important; overflow:visible!important; padding:1px 0px!important; position:static!important; right:auto!important; top:auto!important; vertical-align:baseline!important; width:auto!important; font-family:Consolas,context: )
.setAnimationDuration(2.0)
imageView.alpha = 0.0
.commitAnimations()
//淡入动画
)
.setAnimationDuration(2.0)
imageView.alpha = 1.0
.commitAnimations()
//移动动画
)
.setAnimationDuration(2.0)
imageView.center = CGPointMake (250,250)
.setAnimationCurve( UIViewAnimationCurve EaSEOut ) //设置动画相对速度
.commitAnimations()
//大小调整动画
)
.setAnimationDuration(2.0)
imageView.frame = (100,180,50,50)
.commitAnimations()

(2)两个视图切换的过渡动画
UIViewAnimationTransition定义了5种过渡动画类型:
None:无过渡动画效果
FlipFromLeft:从左侧向右侧翻转
FlipFromright:从右侧向左侧翻转
CurlUp:向上卷数翻页
CurlDown:向下翻页
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
import UIKit
class ViewController : UIViewController {
override func viewDidLoad()
{
super .viewDidLoad()
//创建一个按钮,用来点击播放动画
let button: UIButton = (type:. System )
button.frame= CGRectMake (10,100,30)
button.setTitle( "播放动画" ottom:auto!important; float:none!important; height:auto!important; left:auto!important; line-height:1.5em!important; margin:0px!important; overflow:visible!important; padding:1px 0px!important; position:static!important; right:auto!important; top:auto!important; vertical-align:baseline!important; width:auto!important; font-family:Consolas,forState: UIControlState . normal )
button.addTarget( self ottom:auto!important; float:none!important; height:auto!important; left:auto!important; line-height:1.5em!important; margin:0px!important; overflow:visible!important; padding:1px 0px!important; position:static!important; right:auto!important; top:auto!important; vertical-align:baseline!important; width:auto!important; font-family:Consolas,action: Selector ( "play" ),forControlEvents:. TouchUpInside )
.view.addSubview(button);
//添加两个红蓝视图
redView: UIView (frame: (50,150,400))
redView.backgroundColor = UIColor .redColor()
.view.insertSubview(redView,atIndex: 0)
blueView: ottom:auto!important; float:none!important; height:auto!important; left:auto!important; line-height:1.5em!important; margin:0px!important; overflow:visible!important; padding:1px 0px!important; position:static!important; right:auto!important; top:auto!important; vertical-align:baseline!important; width:auto!important; font-family:Consolas,400))
blueView.backgroundColor = .blueColor()
.view.insertSubview(blueView,atIndex: 1)
}
//切换视图并播放动画
play(){
.beginAnimations( nil ottom:auto!important; float:none!important; height:auto!important; left:auto!important; line-height:1.5em!important; margin:0px!important; overflow:visible!important; padding:1px 0px!important; position:static!important; right:auto!important; top:auto!important; vertical-align:baseline!important; width:auto!important; font-family:Consolas,context: )
.setAnimationDuration(3.0)
.setAnimationTransition(. CurlUp ottom:auto!important; float:none!important; height:auto!important; left:auto!important; line-height:1.5em!important; margin:0px!important; overflow:visible!important; padding:1px 0px!important; position:static!important; right:auto!important; top:auto!important; vertical-align:baseline!important; width:auto!important; font-family:Consolas,forView: .view,cache: true )
.view.exchangeSubviewAtIndex(1,withSubviewAtIndex: 0)
.commitAnimations()
}
didReceiveMemoryWarning() {
.didReceiveMemoryWarning()
}
}

(3)页面或元件翻转效果
18
19
20
21
22
23
24
30
viewDidLoad()
{
.viewDidLoad()
//创建一个按钮,用来点击播放动画
button: UIButton = (type:. System )
button.frame= ottom:auto!important; float:none!important; height:auto!important; left:auto!important; line-height:1.5em!important; margin:0px!important; overflow:visible!important; padding:1px 0px!important; position:static!important; right:auto!important; top:auto!important; vertical-align:baseline!important; width:auto!important; font-family:Consolas,30)
button.setTitle( "播放动画" ottom:auto!important; float:none!important; height:auto!important; left:auto!important; line-height:1.5em!important; margin:0px!important; overflow:visible!important; padding:1px 0px!important; position:static!important; right:auto!important; top:auto!important; vertical-align:baseline!important; width:auto!important; font-family:Consolas,forState: UIControlState normal )
button.addTarget( ottom:auto!important; float:none!important; height:auto!important; left:auto!important; line-height:1.5em!important; margin:0px!important; overflow:visible!important; padding:1px 0px!important; position:static!important; right:auto!important; top:auto!important; vertical-align:baseline!important; width:auto!important; font-family:Consolas,action: Selector ( "play" ottom:auto!important; float:none!important; height:auto!important; left:auto!important; line-height:1.5em!important; margin:0px!important; overflow:visible!important; padding:1px 0px!important; position:static!important; right:auto!important; top:auto!important; vertical-align:baseline!important; width:auto!important; font-family:Consolas,forControlEvents:. TouchUpInside )
.view.addSubview(button);
}
//切换视图并播放动画
play(){
//将整个主视图面板实现一个翻转效果
.beginAnimations( "animation" )
.setAnimationDuration(2)
EaseInOut )
.setAnimationTransition(. FlipFromLeft ottom:auto!important; float:none!important; height:auto!important; left:auto!important; line-height:1.5em!important; margin:0px!important; overflow:visible!important; padding:1px 0px!important; position:static!important; right:auto!important; top:auto!important; vertical-align:baseline!important; width:auto!important; font-family:Consolas,forView: ottom:auto!important; float:none!important; height:auto!important; left:auto!important; line-height:1.5em!important; margin:0px!important; overflow:visible!important; padding:1px 0px!important; position:static!important; right:auto!important; top:auto!important; vertical-align:baseline!important; width:auto!important; font-family:Consolas,cache: false )
.commitAnimations()
}
didReceiveMemoryWarning() {
.didReceiveMemoryWarning()
}
}

原文地址:https://www.jb51.cc/swift/324583.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐