暂停并从最后位置恢复动画

时间:2014-03-26 11:49:22

标签: ios iphone objective-c core-animation cabasicanimation

我有一个带有背景图片的按钮,当应用程序运行时我希望按钮旋转,当应用程序进入后台时,按钮应该停止旋转。

我调用无限旋转按钮的方法startSpiningAnimation 当应用程序转到后台时,我调用stopSpinningAnimation来停止旋转动画。

- (void)startSpiningAnimation {
    [self stopSpinningAnimation];

    CABasicAnimation* animation = [CABasicAnimation animationWithKeyPath:@"transform.rotation.z"];
    animation.fromValue = [NSNumber numberWithFloat:0.0];
    animation.toValue = [NSNumber numberWithFloat: 2*M_PI];
    animation.duration = 10.0f;
    animation.repeatCount = INFINITY;
    [self.button.layer addAnimation:animation forKey:@"SpinAnimation"];
}

- (void)stopSpinningAnimation {
    [self.button.layer removeAllAnimations];
}    

- (void)handleApplicationDidBecomeActiveNotification:(NSNotification *)not {
    [self startSpiningAnimation];
}

- (void)handleApplicationWillResignActiveNotification:(NSNotification *)not {
    [self stopSpinningAnimation];
}

一切都很好我唯一的问题是,每当应用程序到达前景并且动画开始时,它从原始位置开始。

(我完全明白为什么会发生这种情况,肥胖的是我在应用程序转到后台时移除所有动画..我只是不知道如何解决这个问题)

我想要的是按钮旋转动画将从它的最后一个角度继续。

1 个答案:

答案 0 :(得分:0)

您可以在update()方法中收集所有“动态”行为,只有当应用位于前台时才会调用此方法。

因此,您可以使用创建,更新和停止动画的方法。当您的应用程序失焦时,不再调用更新,并且不再更新动画。但它仍然存在,相关变量保留在以前的状态中。