CABasicAnimation

作者: 天空中的球 | 来源:发表于2015-12-03 23:24 被阅读348次

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

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

    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/

    相关文章

      网友评论

        本文标题:CABasicAnimation

        本文链接:https://www.haomeiwen.com/subject/fakshttx.html