根据我的理解,beginTime可以用来表示“嘿,从正好在12:00开始”。但是我怎么用CFTimeInterval类型告诉它?我认为这只是一种指定秒数的“浮动”值。
那么还有什么与CAMediaTiming协议中指定的timeOffset属性的区别?
答案 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的作用。它从父动画中指定相对开始时间(默认情况下,组中的多个动画一次全部触发)。
指定的开始时间 接收者与其父母有关 对象,如果适用的话。
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的所有属性的彻底解释(重新记录)。