【发布时间】:2009-07-22 16:09:54
【问题描述】:
就我的理解而言,beginTime 可以用来表示“嘿,正好在 12:00 点开始”。但是我如何用 CFTimeInterval 类型来说明这一点?我以为这无非是一种“浮点”值来指定秒数。
或者与 CAMediaTiming 协议中指定的 timeOffset 属性有何不同?
【问题讨论】:
标签: ios iphone cocoa-touch uikit core-animation
就我的理解而言,beginTime 可以用来表示“嘿,正好在 12:00 点开始”。但是我如何用 CFTimeInterval 类型来说明这一点?我以为这无非是一种“浮点”值来指定秒数。
或者与 CAMediaTiming 协议中指定的 timeOffset 属性有何不同?
【问题讨论】:
标签: ios iphone cocoa-touch uikit core-animation
我在文档中错过的内容:beginTime 位于“核心动画绝对时间”中,因此您必须获取当前时间并指定您的偏移量:
// Start in 5 seconds
theAnimation.beginTime = CACurrentMediaTime() + 5;
【讨论】:
你首先需要像这样转换到图层的时间空间:
let currentLayerTime = myLayer.convertTime(CACurrentMediaTime(), from: nil)
然后您可以将beginTime 设置为相对于图层的现在时间。例如,让动画在 2 秒内开始:
myAnimation.beginTime = currentLayerTime + 2
您可能还希望将fillMode 设置为.backwards,以便在添加动画之前设置最终属性值:
myAnimation.fillMode = .backwards
myLayer.someProperty = someFinalValue
myLayer.addAnimation(myAnimation, forKey: "myAnimationName")
【讨论】:
let currentLayerTime = myLayer.convertTime(CACurrentMediaTime(), from: nil) 如此重要,因为CACurrentMediaTime() 可能不那么精确
不,这不是 beginTime 所做的。它指定其父动画的相对开始时间(默认情况下,组中的多个动画同时触发)。
指定开始时间 接收者与其父母的关系 对象(如果适用)。
timeOffset 导致它在将在 offSet 时间所在的帧处开始动画,当它到达结尾时,它会循环播放。换句话说,假设 A、B、C、D、E 是动画帧,如果您将 beginTime 或 timeOffset 设置为正常情况下点击帧 C 时的值,则会在各种情况下发生这种情况。
Normal |A->B->C->D->E
beginTime: | A->B->C->D->E
timeOffset: |C->D->E->A->B
【讨论】:
我认为 CAMediaTiming 协议的文档非常糟糕。 Time Warp in Animation 是对 CAMediaTiming 协议所有属性的详尽解释(重新文档化)。
【讨论】: