CoreAnimation

概念篇:

 . CoreAnimation翻译过来就是核心动画,听起来很高大上,其实它就是一组API而已,一组很强大的动画处理API,它会让你的应用使用很少的代码构建出很绚丽的效果。

.Core Animation的动画执行都是在后台(子线程),不会阻塞到主线程的

.Core Animation是直接作用在CaLayer上的,并不是UIView上

使用步骤:

1.首先把QuaratzCore.framework添加进来并 应用头文件

2.初始化一个CAAnimation 对象,并设置属性(其实我们一般使用CAAnimation的子类)后面会说为什么,从属性中可以确定我们的动画是怎样的

3.这是最很重要的一步,上面说过CoreAnimation是作用在CALayer上的,调用CALayer的addAnimation:forKey:方法把动画添加到CALyaer上这样就能执行动画了

4.移除动画,调用CALayer的removeAnimationForKey:方法可以停止CALayer中的动画

CAAnimation继承关系

经常用CoreAnimarion的朋友应该知道我们平时基本不会直接使用CAAnimation初始化一个动画对象,一般情况下我们都是用其子类,下面我们看看他的继承结构


CoreAnimation_第1张图片
黑线代表继承,黑色文字代表类名,白色文字代表属性。其中CAMediaTiming是一个协议(protocol)。

* CAAnimation是所有动画类的父类,但是它不能直接使用,应该使用它的子类

* 常见属性有:

1>duration:动画的持续时间

2>repeatCount:动画的重复次数,loadingAnimation.repeatCount = LONG_MAX(基本可以代表无限循环了)

3>timingFunction:控制动画运行的节奏

timingFunction可选的值有:

kCAMediaTimingFunctionLinear(线性):匀速,给你一个相对静态的感觉

kCAMediaTimingFunctionEaseIn(渐进):动画缓慢进入,然后加速离开

kCAMediaTimingFunctionEaseOut(渐出):动画全速进入,然后减速的到达目的地

kCAMediaTimingFunctionEaseInEaseOut(渐进渐出):动画缓慢的进入,中间加速,然后减速的到达目的地。这个是默认的动画行为。

4>delegate:动画代理

动画开始的时候调用

- (void)animationDidStart:(CAAnimation *)anim;

动画停止的时候调用

- (void)animationDidStop:(CAAnimation *)anim finished:(BOOL)flag;

下面介绍几个我们常用的动画类

CABasicAnimation:基本动画类,继承CAPropertyAnimation属性动画

来一波代码感受一下

CABasicAnimation *loadingAnimation = [CABasicAnimation animationWithKeyPath:@"transform.rotation.z"]; //核心部分了,定义某个属性

loadingAnimation.duration = 0.8;  //动画持续时间

loadingAnimation.repeatCount = LONG_MAX;  //重复次数

loadingAnimation.fromValue = @(0); //开始值

loadingAnimation.toValue = @(2*M_PI); //结束值

动画过程说明:

随着动画的进行,在长度为duration的持续时间内,keyPath相应属性的值从fromValue渐渐地变为toValue

keyPath内容是CALayer的可动画Animatable属性

如果fillMode=kCAFillModeForwards同时removedOnComletion=NO,那么在动画执行完毕后,图层会保持显示动画执行后的状态。但在实质上,图层的属性值还是动画执行前的初始值,并没有真正被改变。可以通过打印看看其位置信息


CAKeyframeAnimation 关键帧动画,继承CAPropertyAnimation属性动画

属性说明:

values:上述的NSArray对象。里面的元素称为“关键帧”(keyframe)。动画对象会在指定的时间(duration)内,依次显示values数组中的每一个关键帧

path:可以设置一个CGPathRef、CGMutablePathRef,让图层按照路径轨迹移动。path只对CALayer的anchorPoint和position起作用。如果设置了path,那么values将被忽略

keyTimes:可以为对应的关键帧指定对应的时间点,其取值范围为0到1.0,keyTimes中的每一个时间值都对应values中的每一帧。如果没有设置keyTimes,各个关键帧的时间是平分的

CABasicAnimation可看做是只有2个关键帧的CAKeyframeAnimation

下一篇将会记录“贝塞尔曲线与CAShapeLayer”的神奇功效

你可能感兴趣的:(CoreAnimation)