iOS CALayer动画
$[timeformat('2018-09-03T13:19:26+08:00')]

keyPath

transform.scale = 比例轉換
transform.scale.x = 宽的比例轉換
transform.scale.y = 高的比例轉換
transform.rotation.z = 平面圖的旋轉
opacity = 透明度
margin=边框间隔?
zPosition = 平面图的位置
backgroundColor = 背景色
cornerRadius = layer的角度
borderWidth = 边框宽度
contents = 内容?
bounds = 大小?
contentsRect = 内容矩形
frame = 位置
hidden = 隐藏
mask = 标记
maskToBounds
position = 位置
shadowOffset = 阴影偏移?
shadowColor = 阴影颜色
shadowRadius = 阴影角度

CALayer

CoreAnimation

CAAnimation

基本属性说明

属性 说明
duration 动画持续时间
repeatCount 重复次数,无限循环可以设置INFINITY(HUGE_VALF)或者MAXFLOAT
repeatDuration 重复时间
removeOnCompletion 默认为YES,代表动画执行完毕,从Layer上移除,图形会恢复到动画执行之前的状态。如果想要保持动画最终状态,那就设置为NO,并且fillMode = kCAFillModeForwards;
fillMode 当前视图在非active时段的状态比如 动画开始前 动画结束后
beginTime 可以用来延迟动画开始时间,让多个动画顺序执行
timingFuction 速度控制函数,控制动画运行的节奏
deleget 代理

fillMode 说明

  • kCAFillModeRemoved 这个是默认值,也就是说当动画开始前和动画结束后,动画对layer都没有影响,动画结束后,layer会恢复到之前的状态

  • kCAFillModeForwards 当动画结束后,layer会一直保持着动画最后的状态

  • kCAFillModeBackwards 在动画开始前,只需要将动画加入了一个layer,layer便立即进入动画的初始状态并等待动画开始。

  • kCAFillModeBoth 这个其实就是上面两个的合成.动画加入后开始之前,layer便处于动画初始状态,动画结束后layer保持动画最后的状态

动画的暂停 和 恢复

#pragma - mark 暂停CALayer的动画
-(void)pauseLayer:(CALayer*)layer
{
    CFTimeInterval pausedTime = [layer convertTime:CACurrentMediaTime() fromLayer:nil];

    // 让CALayer的时间停止走动
      layer.speed = 0.0;
    // 让CALayer的时间停留在pausedTime这个时刻
    layer.timeOffset = pausedTime;
}

#pragma - mark 恢复CALayer的动画
-(void)resumeLayer:(CALayer*)layer
{
    CFTimeInterval pausedTime = layer.timeOffset;
    // 1. 让CALayer的时间继续行走
      layer.speed = 1.0;
    // 2. 取消上次记录的停留时刻
      layer.timeOffset = 0.0;
    // 3. 取消上次设置的时间
      layer.beginTime = 0.0;
    // 4. 计算暂停的时间(这里也可以用CACurrentMediaTime()-pausedTime)
    CFTimeInterval timeSincePause = [layer convertTime:CACurrentMediaTime() fromLayer:nil] - pausedTime;
    // 5. 设置相对于父坐标系的开始时间(往后退timeSincePause)
      layer.beginTime = timeSincePause;
}

CABasicAnimation

CAKeyframeAnimation 关键帧动画

CAAnimationGroup 动画组

贝塞尔曲线

弹性动画 CASpringAnimation

CASpringAnimation *springAnimation = [CASpringAnimation animationWithKeyPath:@"transform.scale"];
springAnimation.damping = 7;// 阻尼系数(学过物理的都知道)
springAnimation.stiffness = 100;// 刚度系数(形变后产生弹力的大小的系数。刚度系数越大,弹力越大)
springAnimation.mass = 1;// 惯性系数 代表物体质量
springAnimation.initialVelocity = 2.0;// 初始速度 0 初始速度与运动方向一致 负数,初始速度与运动方向不一致
springAnimation.fromValue = @0;// 初始动画改变属性的值
springAnimation.toValue = @1;// 最终动画改变属性的值
springAnimation.duration = 2.0;// 动画时长「敲黑板,划重点!这个很重要」
[self.layer addAnimation:springAnimation forKey:@"springScale"];

特殊的Layer实现特殊动画

CATransition

CAReplicatorLayer

CAEmitterLayer 粒子引擎