CALayer 和 CAAnimation
2018-04-27 本文已影响0人
吃面多放葱
Layer
-
Layer可以绘制的动画
动画类型 -
CALayer position 和 anchorpoint
- anchorpoint 基于单位坐标系,默认 (0.5,0.5)
- position 基于点坐标系,具体位置由锚点决定
frame 属性是在 positon和bounds属性下衍生出来的,frame相对于父类坐标系,bounds定义自身坐标系
锚点位置与postion的变化
锚点如何影响图层变化
图层变化矩阵数据配置
-
Layer Tree 分类
- 模型树(Model Tree)
- 显示树(Presentation Tree)
- 渲染树(Render Tree)
-
图层(CALayer) 添加动画(CAAnimation)
动画基于操作图层对象来展示效果,通过下列方法来给图层添加动画
- (void)addAnimation:(CAAnimation *)anim
forKey:(NSString *)key;
CAAnimation
-
CoreAnimation层级
层级 -
CoreAnimation如何绘制内容
绘制流程 -
CoreAnimation API
CAAnimationGroup `animations`
CAPropertyAnimation `keypath`
- CABasicAnimation `fromValue` `toValue`
- CAKeyframeAnimation `values` `path` `keyTimes`
CATransition `type` `subType` `startProgress` `endProgress`
- 关于动画时间的控制
动画暂停
//根据全局时间获取本地时间
CFTimeInterval pausedTime = [layer convertTime:CACurrentMediaTime() fromLayer:nil];
//将图层动画速度设为0
layer.speed = 0.0;
//根据暂停的本地时间设置偏移
layer.timerOffset = pausedTime;
动画恢复
//得到偏移时间
CFTimeInterval pausedTime = layer.timeOffset;
//恢复图层的速度
layer.speed = 1.0;
//设置timerOffset
layer.timeOffset = 0.0;
//设值为0,进行时间转换
layer.beginTime = 0.0;
//beginTime在当前时间的左侧
CFTimeInterval timeSincePause = [layer convertTime:CACurrentMediaTime() fromLayer:nil] - puasedTime;
layer.beginTime = timeSincePause;
//动画恢复的时间点,要求:
1.beginTime = currentTime - timeOffset
2.timeOffset = 0
CAMediaTiming Delegate
CAAimation, CALayer 都遵循 CAMediatiming 协议,都包含下列属性
begintTime
speed
timeoffset
duration
repeatDuration
repeatCount
fillmode