CoreAnimation

一、CoreAnimation的介绍


Core Animation是一组非常强大的动画处理API,使用它能做出非常绚丽的动画效果,而且往往是事半功倍,使用它需要添加QuartzCore.framework和引入对应的框架 .


二、CoreAnimation 的动画对象CAAnimation

  1. CAPropertyAnimationCAAnimation的子类,也是个抽象类,要想创建动画对象,应该使用它的两个子类:CABasicAnimationCAKeyframeAnimation.
    keyPath:CoreAnimation 的 keyPath 是针对layer的属性来的,凡是属性备注最后又Animatable的都能用来当做动画属性
    常用的动画属性如下表
属性 注释
bounds 尺寸
position 位置
zPosition z轴位置
anchorPoint 锚点
anchorPointZ z轴锚点
hidden 隐藏
borderWidth 边框宽度
borderColor 边框颜色
cornerRadius 圆角
opacity 透明度
shadowColor 阴影颜色
shadowOffset 阴影偏移
shadowOpacity 阴影透明度
shadowRadius 阴影圆角
transform transform.translation.x(y, z) 平移 transform.scale.x(y, z)缩放 transform.rotation.x(y, z) 旋转,z轴的动画,在没有设置透视效果的情况下看不到,所以一般不用,要看到z轴的动画一般直接用transfrom来做在keyPath,并设置CATransform3D结构体对象的m34属性
strokeEnd CAShapeLayer(终点)
strokeStart CAShapeLayer(起点)
colors CAGradientLayer(渐变色数组)
locations CAGradientLayer(渐变色位置数组)
startPoint CAGradientLayer(开始位置,默认是0.5,0)
endPoint CAGradientLayer(结束位置,默认是0.5,1)
instanceCount CAReplicatorLayer(复制数)
instanceTransform CAReplicatorLayer(赋值层形变)
  • CABasicAnimation:根据keyPath设置layer动画的起始位置和结束位置,实现单步动画
  • CAKeyframeAnimation:有多个变化组合而成的动画
    CAKeyframeAnimation的属性设置,CABasicAnimation可以看成是values数组中只包含两个元素的CAKeyframeAnimation
    @property(nullable, copy) NSArray *values;
    @property(nullable) CGPathRef path;
    @property(nullable, copy) NSArray *keyTimes;
    @property(nullable, copy) NSArray *timingFunctions;
  1. CAAnimationGroup:由多个基本动画组成的动画组,设置其@property(nullable, copy) NSArray *animations;属性来组合动画
  2. CATransition:转场动画

CATransition的属性设置和说明

    @property(copy) NSString *type;    // 转场类型
    kCATransitionFade
    kCATransitionMoveIn
    kCATransitionPush
    kCATransitionReveal
    @property(nullable, copy) NSString *subtype;  // 转场方向
    kCATransitionFromRight
    kCATransitionFromLeft
    kCATransitionFromTop
    kCATransitionFromBottom

CATransition还可以用来给UIImageView,UILabel等实现转场动画,在他们改变图片,文字,字体,颜色的时候,非常实用


三、CAAnimation 的常用属性

以下属性是给CAAnimation设置动画效果的

  • 1.duration:动画的持续时间
  • 2.repeatCount:重复次数,无限循环可以设置HUGE_VALF或者MAXFLOAT
  • 3.removedOnCompletion:默认为YES,代表动画执行完毕后就从图层上移除,图形会恢复到动画执行前的状态。如果想让图层保持显示动画执行后的状态,那就设置为NO,不过还要设置fillModekCAFillModeForwards,但在实质上,图层的属性值还是动画执行前的初始值,并没有真正被改变。
  • 4.fillMode:决定当前对象在非active时间段的行为
    kCAFillModeRemoved, // 这个是默认值,也就是说当动画开始前和动画结束后,动画对layer都没有影响,动画结束后,layer会恢复到之前的状态
    kCAFillModeForwards, // 当动画结束后,layer会一直保持着动画最后的状态
    kCAFillModeBackwards // 在动画开始前,只需要将动画加入了一个layer,layer便立即进入动画的初始状态并等待动画开始。
    kCAFillModeBoth // 这个其实就是上面两个的合成.动画加入后开始之前,layer便处于动画初始状态,动画结束后layer保持动画最后的状态
  • 5.timingFunction:速度控制函数,控制动画运行的节奏
    kCAMediaTimingFunctionLinear(线性), // 匀速,给你一个相对静态的感觉
    kCAMediaTimingFunctionEaseIn(渐进), // 动画缓慢进入,然后加速离开
    kCAMediaTimingFunctionEaseOut(渐出) // 动画全速进入,然后减速的到达目
    kCAMediaTimingFunctionEaseInEaseOut(渐进渐出) // 动画缓慢的进入,中间加速,然后减速的到达目的地。这个是默认的动画行为。

你可能感兴趣的:(CoreAnimation)