1. 参考书:Core Animation
首先介绍一本书:Core Animation 链接:iOS核心动画高级技巧 这本书是关于CoreAnimation的。
Core Animation是一个复合引擎,它的职责就是尽可能快地组合屏幕上不同的可视内容,这个内容是被分解成独立的图层,存储在一个叫做图层树的体系之中。于是这个树形成了UIKit以及在iOS应用程序当中你所能在屏幕上看见的一切的基础。
动画是CoreAnimation的其中一个功能。
2.CALayer
- iOS中,每个视图都有一个图层属性,即backing layer。图层是真正在屏幕上显示和做动画的。 而视图封装了图层,提供了触摸交互功能,以及CoreAnimation底层方法的高级接口。
2.layer 有2个属性一个是modelLayer, 一个是presentationLayer。 当layer属性改变的时候,立即将新值存入modelLayer中。presentationLayer表示呈现层, 它的属性值代表了在任何指定时刻当前外观效果。
3.隐式动画
1.Core Animation假设屏幕上所有的东西都可以做动画。CoreAnimation根据事务的设置来做动画。 事务用CATransaction类来管理的,CATransaction有begin 和commit方法,layer的属性的改变被事务记录。Core Animation在每个run loop周期中自动开始一次新的事务(run loop是iOS负责收集用户输入,处理定时器或者网络事件并且重新绘制屏幕的东西),即使你不显式的用[CATransaction begin]开始一次事务,任何在一次run loop循环中属性的改变都会被集中起来,然后做一次0.25秒的动画。
2.为何我们改变uiview属性的时候没有动画? 因为view关联的图层的隐式动画被禁用了。对这种图层做动画的唯一办法就是使用UIView的动画函数(而不是依赖CATransaction),或者继承UIView,并覆盖-actionForLayer:forKey:方法,或者直接创建一个显式动画
4.显式动画
1.显式动画即我们主动给图层添加一个新事务。包括属性动画 ,和过渡动画。
显示动画都需要3个步骤:
- 初始化动画对象,
- 设置需要修改的属性的值,
- 把动画添加到layer上。
2.属性动画是对一个layer的属性来做动画,使用keyPath来标记对哪个属性做动画,包括:
- CABaseAnimation,使用fromValue和toValue来表示属性变化的值。
- CAKeyFrameAnimation(对要动画的属性设置多个关键值),使用values 或者path来表示属性变化的值。
3.当想对layer的多个属性做动画的时候,可以使用CAAnimationGroup。把单个属性动画做成一个动画组。
layer常用的做动画的属性:
- backgrounColor(颜色),
- position(位置移动,可以沿着某个path来移动)
- transform.rotate (图层形变:旋转),transform.scale(图层形变:大小),transform.transation(图层形变:x,y轴移动)
- path (从一个path到另一个path的动画)
4.过渡动画:如果要改变一个不能动画的属性(比如图片),或者从层级关系中添加或者移除图层,属性动画将不起作用。需要使用过渡动画。
使用CATransition类来做过渡动画。CATransition有一个type和subtype来标识变换效果,官方目前有4种:
- kCATransitionFade (默认)
- kCATransitionMoveIn
- kCATransitionPush
- kCATransitionReveal
网友评论