0

我已经看到暂停/恢复 CALayer 动画的代码,如下所示:

[暂停]

CALayer *layer = object.icon.layer;
CFTimeInterval pausedTime = [layer convertTime:CACurrentMediaTime() fromLayer:nil];
layer.speed = 0.0;
layer.timeOffset = pausedTime;

[恢复]

CALayer *layer = object.icon.layer;
CFTimeInterval pausedTime = [layer timeOffset];
layer.speed = 1.0;
layer.timeOffset = 0.0;
layer.beginTime = 0.0;
CFTimeInterval timeSincePause = [layer convertTime:CACurrentMediaTime() fromLayer:nil] - pausedTime;
layer.beginTime = timeSincePause;

这很好用。问题是如果一个新的 ViewController 被推入 ViewController 堆栈,或者应用程序进入后台然后返回,CALayer 动画会立即捕捉到它们的结束位置!

什么是处理有效暂停/取消暂停 UIView 动画的好方法?我可以在其中最小化应用程序并将其恢复,或者在不丢失动画的情况下更改活动的 ViewController!

4

1 回答 1

0

我认为在暂停时,您需要记住根层的 mediaTime,并在您的应用程序恢复后恢复该值……否则,时间会随着您的应用程序暂停时所经过的时间而跳跃。

于 2012-10-06T09:12:58.880 回答