如何使用CFTimeInterval为动画指定beginTime?

时间:2009-07-22 16:09:55

标签: ios iphone cocoa-touch uikit core-animation

根据我的理解,beginTime可以用来表示“嘿,从正好在12:00开始”。但是我怎么用CFTimeInterval类型告诉它?我认为这只是一种指定秒数的“浮动”值。

那么还有什么与CAMediaTiming协议中指定的timeOffset属性的区别?

4 个答案:

答案 0 :(得分:54)

我在文档中遗漏的内容:beginTime在“核心动画绝对时间”中,因此您需要获取当前时间并指定您的偏移量:

// Start in 5 seconds
theAnimation.beginTime = CACurrentMediaTime()+5;

答案 1 :(得分:18)

首先需要转换为图层的时空,如下所示:

beginTime

然后您可以设置相对于图层现在时间的myAnimation.beginTime = currentLayerTime + 2 。例如,要以2s开始制作动画:

fillMode

您还可能希望将.backwards设置为myAnimation.fillMode = .backwards myLayer.someProperty = someFinalValue myLayer.addAnimation(myAnimation, forKey: "myAnimationName") ,以便在添加动画之前设置最终属性值:

{{1}}

答案 2 :(得分:12)

不,这不是beginTime的作用。它从父动画中指定相对开始时间(默认情况下,组中的多个动画一次全部触发)。

来自documentation

  

指定的开始时间   接收者与其父母有关   对象,如果适用的话。

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

答案 3 :(得分:12)

我认为CAMediaTiming Protocol的文档非常糟糕。 Time Warp in Animation是对CAMediaTiming Protocol的所有属性的彻底解释(重新记录)。