暂停和恢复动画除iOS中的旋转外?

时间:2015-03-10 06:23:50

标签: ios animation rotation core-animation calayer

如果我只需要暂停/恢复旋转,那么我使用以下代码:

- (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;
}

但是我希望在旋转之前停止当前的图层动画并在之后恢复。此代码也会停止轮换过程。

如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

通过将图层的速度设置为0,您无法暂停图层的动画。

您可以从图层中获取活动动画,并使用您用于在整个图层上暂停动画的技术暂停各个动画(将速度设置为0)。

请注意,您无法保存指向您创建的动画对象的指针,因为系统实际上会将动画的副本添加到图层,而不是原始动画。您可能需要使用CALayer animationForKey方法获取动画。

免责声明:我从未尝试过这个。我的答案是基于核心动画如何运作的一般知识。