iOS CALayer动画
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"];