CAMediaTiming的时间系统及动画暂停示例
2016-06-24 18:05
417 查看
相对时间
CAMediaTiming的时间是分层的,相对独立的,这样保证了每个图层/动画都有自己的时间,可以独立地加速、延时、偏移
beginTime是与父图层/父动画开始的间隔;
timeOffset是在父图层/父动画偏移的基础上进行的偏移;
speed是在父图层/父动画速度的基础上进行的加速
全局时间(机器时间)、本地时间
视频的时间系统可以暂停、倒退,是从0开始的;动画在设置好fromValue、
toValue,一旦 commit 后,
presentLayer就已经确定在哪个时间点呈现什么样的
property了, 所以动画的时间系统不能暂停、倒退,采用了绝对时间
全局时间返回了设备自从上次启动后的秒数,这个具体值是无关紧要的,它只是为我们提供一个绝对时间
本地时间根据父图层/动画中的
beginTime、
timeOffset和
speed属性计算而来。可以根据本地时间来让动画展现某个时间的状态。每个图层/动画都有自己的本地时间,并可以通过以下的方法在各个时间坐标里转换
- (CFTimeInterval)convertTime:(CFTimeInterval)t fromLayer:(CALayer *)l; - (CFTimeInterval)convertTime:(CFTimeInterval)t toLayer:(CALayer *)l;
动画暂停
//根据全局时间获取本地时间,这样就可以知道停在哪里了 CFTimeInterval pausedTime = [layer convertTime:CACurrentMediaTime() fromLayer:nil]; //将图层的动画速度设为0 layer.speed = 0.0; //根据暂停的本地时间设置偏移 layer.timeOffset = pausedTime;
动画恢复
//得到偏移的时间 CFTimeInterval pausedTime = [layer timeOffset]; //恢复图层的速度(小于0时动画会倒播) layer.speed = 1.0; //由下图可知,timeOffset应该为0 layer.timeOffset = 0.0; //设置为0,以进行时间转换 layer.beginTime = 0.0; //由下图可知,beginTime在当前时间的左侧 CFTimeInterval timeSincePause = [layer convertTime:CACurrentMediaTime() fromLayer:nil] - pausedTime; layer.beginTime = timeSincePause;
相关文章推荐
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 不可修补的 iOS 漏洞可能导致 iPhone 4s 到 iPhone X 永久越狱
- iOS 12.4 系统遭黑客破解,漏洞危及数百万用户
- 每日安全资讯:NSO,一家专业入侵 iPhone 的神秘公司
- [转][源代码]Comex公布JailbreakMe 3.0源代码
- Gifski:一个跨平台的高质量 GIF 编码器
- 模仿动画的放大缩小容器
- jQuery 1.9.1源码分析系列(十五)动画处理之缓动动画核心Tween
- Android实现定制返回按钮动画效果的方法
- Android中ViewFlipper的使用及设置动画效果实例详解
- jQuery实现美观的多级动画效果菜单代码
- php判断GIF图片是否为动画的方法
- jQuery实现动画效果circle实例
- HTML5游戏引擎LTweenLite实现的超帅动画效果(附demo源码下载)
- 浅析JavaScript动画
- js排序动画模拟-插入排序
- javascript+HTML5的Canvas实现Lab单车动画效果
- 基于javascript实现漂亮的页面过渡动画效果附源码下载