iOS中关于定时

跟我们生活的宇宙一样,Core Animation中的时间也是相对的。一秒时间并不一定就是一秒钟。与坐标一样,时间是可以缩放的。

CAAnimation遵循CAMediaTiming协议,可以设置其speed属性来缩放它的时间跨度。因此,若要计算图层之间的时间,需要对它们进行转换,就像转换不同视图或图层中的点一样。

1
2
    localPoint = [self convertPoint:remotePoint fromLayer:otherLayer];
    localTime = [self convertTime:remotetime fromLayer:otherLayer];

这种情况并不常见,但在协调动画时会出现。你可能会使用其他图层的特定动画,在该动画要结束时便开始你自己的动画。

1
2
3
    CAAnimation *otherAnim = [layer animationForKey:@"anim"];
    CFTimeInterval finish = otherAnim.beginTime + otherAnim.duration;
    myAnim.beginTime = [self convertTime:finish fromLayer:layer];

像这样设置beginTime是链接动画的不错方法,即使是硬编码时间而不询问其他图层。如果想要引用“当前时间”,可以使用CACurrentMediaTime()

这又会引发另一个问题。你的属性值现在是多少,动画什么时候开始?可以假设是fromValue(起始值),但实际上并非如此。因为动画还没有开始,所以它是当前模型的值。一般来说,这个值是toValue(目标值)。来看下面的动画:

1
2
3
4
5
6
7
8
9
    [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意味着动画在执行前后不会对值有什么影响。在动画执行前后可以通过设置填充模式为kCAFillModeBackwardskCAFillModeForwardskCAFillModeBoth来更改为“恒定”值,结果如图9-3所示。

图9-3
各种填充模式在媒体定时函数中的效果

大部分情况下,应该设置fillModekCAFillModeBackwardskCAFillModeBoth

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值