iOS 开发每天分享优质文章

CABasicAnimation

2015-12-03  本文已影响348人  天空中的球

了解CABasicAnimation之前,先了解下Core Animation是什么?简单的说它是一套包含图形绘制,投影,动画的OC类集合,通过CoreAnimation提供的接口,我们可以方便完成自己所想要的动画。

图形分为的几个层次,越往上封装层度越高
Core Animation则是可以理解为通过 CALayerCAAnimation,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 :

大部分的keyPath,可以直接在CALayer 中的属性找到,但是下一步的keyPath 如 transform.scale 就得通过 Core Animation Programming Guide 中去寻找。

transform.keyPath

下面key分别是transform.scale;position;transform.rotation.x;opacity.

AnimationGIF

另外也可以用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/

上一篇下一篇

猜你喜欢

热点阅读