- Core Animation的使用步骤
- 首页的有一个
CALayer
- 初始化一个
CAAnimation对象,并设置一些动画相关属性
- 通过调用
CALayer的addAnimation:forKey:方法,增加CAAnimation对象到CALayer中,这样就能开始执行动画了
- 通过调用
CALayer的removeAnimationForKey:方法可以停止CALayer中的动画
CAAnimation
- 从前面的叙述可以看出,想要执行动画,就必须初始化一个
CAAnimation对象
- 其实,一般情况下,我们看到的是
CAAnimation的子类,因此,先大致看看CAAnimation的集成结构
CAAnimation的常用属性
CAAnimation是所有动画类的父类,但是它不能直接使用,应该使用它的子类
duration:动画持续的时长
repeatCount:动画重复的次数 ,无限循环可以设置HUGE_VALF或者MAXFLOAT
removedOnCompletion :默认为YES,代表动画执行完毕后就从图层上移除,图形会恢复到动画执行前的状态。如果想让图层保持显示动画执行后的状态,那级设置为NO ,不过还要设置fillModel为KCAFillModeFowards
fillMode: 决定当前对象在非active时间段的行为,比如动画开始之前或者动画结束之后
-
timingFunction:控制动画运行的节奏
-
kCAMediaTimingFunctionLinear(线性):匀速,给你一个相对静态的感觉
-
kCAMdeiaTimingFunctionEaseIn(渐进):动画缓慢进入,然后加速离开
-
kCAMediaTimingFunctionEasOut(渐出) :动画全速进入,然后减速的到达目的地
-
kCAMediaTimingFunctionEaseInEaseOut (渐进渐出):动画缓慢的进入,中间加速,然后减速的到达目的地。这个是默认的动画行为
-
fillModel属性值(要想fillModel有效,最好设置removedOnComplection = NO)
-
kCAFillModeRemoved这个是默认值,也就是说当动画开始前和动画结束后,动画对layer都没有影响,动画结束后,layer会恢复到之前的状态
-
kCAFillModelForwards当动画结束后,layer会一直保持着动画最后的状态
-
kCAFillModeBackwards 在动画开始前,只需要将动画加入了一个layer,layer便立即进入动画的初始状态并等待动画开始。
-
kCAFillModeBoth 这个其实就是上面两个的合成.动画加入后开始之前,layer便处于动画初始状态,动画结束后layer保持动画最后的状态
delegate :动画代理,用来监听动画的执行过程
beiginTime: 可以用来设置动画延迟执行时间,若想延迟2s,就设置为CACurrentMediaTime()+2 CACurrentMediaTime()为图层的当前时间
代理对象需要实现的方法有:
@interface NSObject (CAAnimationDelegate)
// 动画开始执行的时候触发这个方法
- (void)animationDIdStart:(CAAnimation *)anim;
// 动画执行完毕的时候触发这个方法
- (void) animationDidStop:(CAAnimation *)anim finished:(BOOL) flag;
- 上面介绍的所有属性都是属于·CAAnimation
的,因此,CAAnimation`的所有子类都可以使用