我使用以下代码恢复了我的CABasicAnimation:
CFTimeInterval pausedtime = layer.timeOffset;
layer.speed = 1.0;
layer.timeOffset = 0.0;
layer.beginTime = [layer convertTime:CACurrentMediaTime() toLayer:nil] - pausedTime;
这非常简单。在this文章的最后,作者指出负值speed
值动画反转。在这种情况下,我无法理解timeOffset
和beginTime
应该是什么样的?
P.S。我知道我可以通过从表示层获取当前值并设置为Value和fromValue来反转动画。我想知道是否可以使用speed属性。
答案 0 :(得分:0)
使用.timeOffset = 0
向后恢复动画会遇到问题。 .timeOffset = 0
表示动画在开始时。因此,以反向速度动画将立即完成。因此,例如,如果您拥有动画,动画会在完成时自动删除-它不会播放任何内容:只会消失。
CAAnimation的文档确实不完善。他们的恢复示例仅使用.beginTime
属性。我们可以改用.timeOffset
属性。
1。将图层的开始时间设置为其容器的当前时间:
// set begin time to current time of superlayer to start immediately
let sTime = layer.superlayer?.convertTime(CACurrentMediaTime(), to: nil) ?? 0
layer.beginTime = sTime
2。使用.timeOffset
转到动画要恢复的时刻:
// set starting point of animation to the current "progress"
layer.timeOffset = progress
progress
是您要从动画持续时间恢复的时间位置。也就是说,如果动画持续时间为0.6,则0 ≤ progress ≤ 0.6
。
3。反向启动动画:
// set negative speed to have reverse animation
layer.speed = -1.0
如果需要的话,请不要忘记删除动画。
这是实际上如何应用这些设置的图片: