iOS中关于定时
来源:互联网 发布:政治家族 知乎 编辑:程序博客网 时间:2024/06/05 09:33
跟我们生活的宇宙一样,Core Animation中的时间也是相对的。一秒时间并不一定就是一秒钟。与坐标一样,时间是可以缩放的。
CAAnimation
遵循CAMediaTiming
协议,可以设置其speed
属性来缩放它的时间跨度。因此,若要计算图层之间的时间,需要对它们进行转换,就像转换不同视图或图层中的点一样。
12
localPoint = [self convertPoint:remotePoint fromLayer:otherLayer]; localTime = [self convertTime:remotetime fromLayer:otherLayer];
这种情况并不常见,但在协调动画时会出现。你可能会使用其他图层的特定动画,在该动画要结束时便开始你自己的动画。
123
CAAnimation *otherAnim = [layer animationForKey:@"anim"]; CFTimeInterval finish = otherAnim.beginTime + otherAnim.duration; myAnim.beginTime = [self convertTime:finish fromLayer:layer];
像这样设置beginTime
是链接动画的不错方法,即使是硬编码时间而不询问其他图层。如果想要引用“当前时间”,可以使用CACurrentMediaTime()
。
这又会引发另一个问题。你的属性值现在是多少,动画什么时候开始?可以假设是fromValue
(起始值),但实际上并非如此。因为动画还没有开始,所以它是当前模型的值。一般来说,这个值是toValue
(目标值)。来看下面的动画:
123456789
[CATransaction begin]; anim = [CABasicAnimation animationWithKeyPath:@”opacity”]; anim.fromValue = [NSNumber numberWithDouble:1.0]; anim.toValue = [NSNumber numberWithDouble:0.5]; anim.duration = 5.0; anim.beginTime = CACurrentMediaTime() + 3.0; [layer addAnimation:anim forKey:@”fade”]; layer.opacity = 0.5; [CATransaction commit];
前3秒动画不动。在这段时间内,默认属性的不透明度(opacity
)会从1.0渐变成0.5。然后动画开始,设置不透明度从它的起始值逐渐变成目标值。因此图层会在0.25秒时间内从1.0渐变成0.5,3秒之后,它就会跳回1.0并且在5秒内渐变为0.5。几乎可以肯定,这并不是你想要的结果。
可以通过fillMode
解决这个问题。默认的kCAFillModeRemoved
意味着动画在执行前后不会对值有什么影响。在动画执行前后可以通过设置填充模式为kCAFillModeBackwards
、kCAFillModeForwards
或kCAFillModeBoth
来更改为“恒定”值,结果如图9-3所示。
图9-3
各种填充模式在媒体定时函数中的效果
大部分情况下,应该设置fillMode
为kCAFillModeBackwards
或kCAFillModeBoth
。
- iOS中关于定时
- linux中关于定时运行
- 关于ios 中 UIAlertView
- iOS中关于手势
- iOS UIScrollView中实现分页滚动--定时自动滚动分页
- iOS中定时任务的三种方法
- 关于ubuntu中利用crontab设置定时任务的问题
- 关于Android中定时周期执行线程方法
- Java中关于定时自动任务的实现
- c#中关于Datatime在定时中的应用与启发
- IOS中关于NSTimer使用
- IOS中关于NSTimer使用
- 关于iOS中 NSCalendar ,NSDate
- 关于iOS 中DLog 用法
- iOS中关于自定义Tabbar
- 关于IOS中压缩图片
- iOS定时通知
- iOS定时通知
- iOS常用控件尺寸大集合
- mysql 查看负载
- ORACLE常用数值函数、转换函数、字符串函数
- 如何快速汉化一个JAVA软件
- DAVINCI DM365-DM368开发攻略——linux-2.6.32的移植
- iOS中关于定时
- 仿自下向上动画弹出菜单(同时背景窗口变暗/缩小)的实现原理,例小米,苹果等菜单
- Android:interpolator用法
- myeclipse项目名修改后tomcat部署问题
- opencv播放视频添加滚动条
- Vim学习资源汇总
- 3.8Bootstrap学习组件篇之进度条、媒体对象、列表组、面板
- private void InitializeComponent()啥意思
- AE中IColor、IRGBColor和Win32 Color和.Net中Color相互转换