CABasicAnimation
了解CABasicAnimation之前,先了解下Core Animation是什么?简单的说它是一套包含图形绘制,投影,动画的OC类集合,通过CoreAnimation提供的接口,我们可以方便完成自己所想要的动画。
图形分为的几个层次,越往上封装层度越高Core Animation则是可以理解为通过 CALayer
,CAAnimation
,AddAnimation
三者组成动画的。
- CALayer 该事件是谁做;
- CAAnimation 该事件怎么做;
- AddAnimation 将谁做和做怎么做结合起来。
CALayer
CALayer Classes是core animation的基础,CALayer与UIView很类似的概念,我们可以将UIView看做一种特殊的CALayer,只不过UIView可以响应事件而已。一般来说,layer可以有两种用途,二者不互相冲突:一是对view相关属性的设置,包括圆角、阴影、边框等参数,二是实现对view的动画操控。因此对一个view进行core animation动画,本质上是对该view的.layer进行动画操纵。
CAAnimation
1.CABasicAnimation
通过设定起始点,终点,时间,动画会沿着你这设定点进行移动。
2.CAKeyframeAnimation
Keyframe
顾名思义就是关键点的frame
,你可以通过设定CALayer
的始点、中间关键点、终点的frame
,时间,动画会沿你设定的轨迹进行移动
3.CAAnimationGroup
Group
也就是组合的意思,就是把对这个Layer
的所有动画都组合起来。
4.CATransition
这个就是苹果帮开发者封装好的一些动画。
小试牛刀
首先的初始化CALayer,在初始化之前我们需要导入#import <QuartzCore/QuartzCore.h>
// CALayer 执行者
CALayer *myLayer = [[CALayer alloc] init];
myLayer.backgroundColor = [UIColor greenColor].CGColor;
myLayer.frame = CGRectMake(60, 20 + 100, 50, 50);
myLayer.cornerRadius = 5;
[self.view.layer addSublayer:myLayer];
// CAAnimation 怎么做
CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"position"];// 注意 animationWithKeyPath后跟随的是CALayer可接受的Key即可 既使用动画的对象的Key
animation.fromValue = [NSValue valueWithCGPoint:myLayer.position]; // 起始值
CGPoint toPoint = myLayer.position;
toPoint.x += 200;
animation.toValue = [NSValue valueWithCGPoint:toPoint]; // 改变到最大的值
//当你设定这个属性为 YES 时,在它到达目的地之后,动画的返回到开始的值,代替了直接跳转到 开始的值
animation.autoreverses = YES;
//当动画结束后,layer会一直保持着动画最后的状态
animation.fillMode = kCAFillModeForwards;
// 重复的次数
animation.repeatCount = MAXFLOAT;
// 完成这个过程的总时间
animation.duration = 2.0;
//ADDAnimation 将上面两者结合
[myLayer addAnimation:animation forKey:@"TheKeyWithDiffrenceOfAnimation"];
// 此处的key 可以理解为一个标志而已
moveGIF.gif
常用的keyPath :
- opacity;
- position;
- transform
- transform.scale;
- transform.scale.x;
- transform.scale.y;
- transform.rotation.z;
- margin;
- zPosition;
- backgroundColor;
- cornerRadius;
- bounds;
- contents;
- contentsRect;
- frame;
- hidden;
- mask;
- masksToBounds;
- shadowColor;
- shadowOffset;
- shadowOpacity;
- shadowRadius;
大部分的keyPath,可以直接在CALayer 中的属性找到,但是下一步的keyPath 如 transform.scale 就得通过 Core Animation Programming Guide 中去寻找。
transform.keyPath下面key分别是transform.scale
;position
;transform.rotation.x
;opacity
.
另外也可以用CAAnimationGroup将一套动画组合起来咯。
CAAnimationGroup *groupAnnimation = [CAAnimationGroup animation];
groupAnnimation.duration = 5;
groupAnnimation.autoreverses = YES;
// moveAnimation, scaleAnimation, rotateAnimation 都是CABasicAnimation咯
groupAnnimation.animations = @[moveAnimation, scaleAnimation, rotateAnimation];
groupAnnimation.repeatCount = MAXFLOAT;
//开演
[myLayer addAnimation:groupAnnimation forKey:@"group"];
参考
http://blog.csdn.net/lvxiangan/article/details/17167827
https://developer.apple.com/library/prerelease/ios/documentation/GraphicsImaging/Reference/CAAnimation_class/