如果我只需要暂停/恢复旋转,那么我使用以下代码:
- (void)pauseAnimations
{
CFTimeInterval paused_time = [self.layer convertTime:CACurrentMediaTime() fromLayer:nil];
self.layer.speed = 0.0;
self.layer.timeOffset = paused_time;
}
- (void)resumeAnimations
{
CFTimeInterval paused_time = [self.layer timeOffset];
self.layer.speed = 1.0f;
self.layer.timeOffset = 0.0f;
self.layer.beginTime = 0.0f;
CFTimeInterval time_since_pause = [self.layer convertTime:CACurrentMediaTime() fromLayer:nil] - paused_time;
self.layer.beginTime = time_since_pause;
}
但是我希望在旋转之前停止当前的图层动画并在之后恢复。此代码也会停止轮换过程。
如何解决这个问题?
答案 0 :(得分:1)
通过将图层的速度设置为0,您无法暂停图层的动画。
您可以从图层中获取活动动画,并使用您用于在整个图层上暂停动画的技术暂停各个动画(将速度设置为0)。
请注意,您无法保存指向您创建的动画对象的指针,因为系统实际上会将动画的副本添加到图层,而不是原始动画。您可能需要使用CALayer
animationForKey
方法获取动画。
免责声明:我从未尝试过这个。我的答案是基于核心动画如何运作的一般知识。