zoukankan      html  css  js  c++  java
  • CAAnimation解读

    CAAnimation是一个抽象类,遵循了CAMediaTiming协议和CAAction协议!我们不要直接使用CAAnimation类,而是使用其子类:

    • CATransition:提供渐变效果,如推拉push效果,消退fade效果,揭开reveal效果
    • CAAnimationGroup:允许多个动画同时播放
    • CABasicAnimation: 提供了对单一动画的实现
    • CAKeyframeAnimation: 关键桢动画,可以定义动画路线
    • CAPropertyAnimation:属性动画,通常不直接使用,而是使用CABasicAnimation子类

    创建对象

    我们看到有一个工厂方法来创建CAAnimation对象,因此,我们通常都使用这个方法来创建动画:

    当然不同类型的子类使用的方法不一样,对于继承于CAPropertyAnimation的子类,都可以通过属性路径来创建:

    遵守了CAMediaTiming协议

    这个协议是是用于配置动画的相关属性的,英文部分是官方的注释,中文部分为笔者的理解,下面一一讲解:

    遵守了CAAction协议

    这个协议只有一个方法,我们可以调用此方法来触发指定的事件,这样接收者就可以接收到代理。

    CAAnimationDelegate代理

    CAAnimation为这么个属性:

     

    我们只要指定了代理,就可以实现这两个代理方法:

    removedOnCompletion属性

    当我们动画完成时,如果希望动画就自动移除的话,我们可以设置此属性为YES,默认值为YES。如果我们想要循环或者执行多次动画,就将此属性设置为NO

    timingFunction属性

    这个属性是用于指定动画移动的步调是什么样式,比如线性。

    关于CAMediaTimingFunction类,主要是这向个方法。当创建时,我们+functionWithName:工厂方法来创建系统已经提供的样式。

    其中这个name有这几个变量对应的:

    如果我们想要让其移动动画是按贝塞尔曲线的路径行动,那么可以用这两个方法来创建:

    转至:http://www.henishuo.com/caanimation-indtroduce-in-detail/ 

    CAKeyFrameAnimation的使用中有以下主要的属性需要注意,有些属性可能比较绕比较难以理解,我会结合图片进行必要的说明。

    (1)values属性

    values属性指明整个动画过程中的关键帧点,例如上例中的A-E就是通过values指定的。需要注意的是,起点必须作为values的第一个值。

    (2)path属性

    作用与values属性一样,同样是用于指定整个动画所经过的路径的。需要注意的是,values与path是互斥的,当values与path同时指定时,path会覆盖values,即values属性将被忽略。例如上述例子等价于代码中values方式的path设置方式为:

    1     CGMutablePathRef path = CGPathCreateMutable();
    2     CGPathMoveToPoint(path, NULL, rectLayer.position.x - 15, rectLayer.position.y - 15);
    3     CGPathAddLineToPoint(path, NULL, 320 - 15, rectLayer.frame.origin.y);
    4     CGPathAddLineToPoint(path, NULL, 320 - 15, rectLayer.frame.origin.y + 100);
    5     CGPathAddLineToPoint(path, NULL, 15, rectLayer.frame.origin.y + 100);
    6     CGPathAddLineToPoint(path, NULL, 15, rectLayer.frame.origin.y);
    7     rectRunAnimation.path = path;
    8     CGPathRelease(path);

    (3)keyTimes属性

    该属性是一个数组,用以指定每个子路径(AB,BC,CD)的时间。如果你没有显式地对keyTimes进行设置,则系统会默认每条子路径的时间为:ti=duration/(5-1),即每条子路径的duration相等,都为duration的14。当然,我们也可以传个数组让物体快慢结合。例如,你可以传入{0.0, 0.1,0.6,0.7,1.0},其中首尾必须分别是0和1,因此tAB=0.1-0, tCB=0.6-0.1, tDC=0.7-0.6, tED=1-0.7.....

    (4)timeFunctions属性

    用过UIKit层动画的同学应该对这个属性不陌生,这个属性用以指定时间函数,类似于运动的加速度,有以下几种类型。上例子的AB段就是用了淡入淡出效果。记住,这是一个数组,你有几个子路径就应该传入几个元素

    1 kCAMediaTimingFunctionLinear//线性
    2 kCAMediaTimingFunctionEaseIn//淡入
    3 kCAMediaTimingFunctionEaseOut//淡出
    4 kCAMediaTimingFunctionEaseInEaseOut//淡入淡出
    5 kCAMediaTimingFunctionDefault//默认

    (5)calculationMode属性

    该属性决定了物体在每个子路径下是跳着走还是匀速走,跟timeFunctions属性有点类似

    1 const kCAAnimationLinear//线性,默认
    2 const kCAAnimationDiscrete//离散,无中间过程,但keyTimes设置的时间依旧生效,物体跳跃地出现在各个关键帧上
    3 const kCAAnimationPaced//平均,keyTimes跟timeFunctions失效
    4 const kCAAnimationCubic//平均,同上
    5 const kCAAnimationCubicPaced//平均,同上
  • 相关阅读:
    git
    avalonJS
    push
    DataTables使用学习记录
    django models使用学习记录
    js操作记录
    部署网站遇到的问题
    ubuntu修改文件权限记录
    django发送邮件
    ubuntu使用记录
  • 原文地址:https://www.cnblogs.com/nenhallgg/p/5315568.html
Copyright © 2011-2022 走看看