通过调用animateSettings方法加载视图时,我在上下动画UIImageView,执行以下操作:
- (void)animateSettings {
NSLog(@"Animate Settings");
[UIView animateWithDuration:1.0f
delay:0.0f
options:(UIViewAnimationOptionAutoreverse | UIViewAnimationOptionRepeat | UIViewKeyframeAnimationOptionAllowUserInteraction | UIViewAnimationOptionBeginFromCurrentState)
animations:^{
self.waterImageView.center = CGPointMake(self.view.bounds.size.width/2, self.view.bounds.size.height/2-75);
}
completion:nil];
}
问题是,当我退出应用程序并返回时,动画会冻结。我理解为什么会这样,但我似乎无法弄清楚如何恢复它。
我在viewDidLoad方法中设置了NSNotifications
,以便在视图变为活动状态或进入后台时通知我。执行以下操作时,我调用animateSettings
方法或removeAnimation
方法。
[[NSNotificationCenter defaultCenter]addObserver:self
selector:@selector(animateSettings)
name:UIApplicationDidBecomeActiveNotification
object:nil];
[[NSNotificationCenter defaultCenter]addObserver:self
selector:@selector(removeAnimation)
name:UIApplicationDidEnterBackgroundNotification
object:nil];
这是我的removeAnimation方法
- (void)removeAnimation {
NSLog(@"Remove Animation");
[self.waterImageView.layer removeAllAnimations];
}
问题:即使正确调用该方法(NSLogging有效),动画仍然会被冻结。
答案 0 :(得分:3)
第一次开始制作动画时(我们称之为 1 )动画代码说:
self.waterImageView.center =
CGPointMake(self.view.bounds.size.width/2, self.view.bounds.size.height/2-75);
现在让我们说你进入后台并返回。再次调用您的动画代码(让我们称之为 2 ):
self.waterImageView.center =
CGPointMake(self.view.bounds.size.width/2, self.view.bounds.size.height/2-75);
好的,但是在 2 期间,在哪里<{1}} ?它已经 at self.waterImageView
- 因为这是你在 1 期间放置的地方!
因此没有任何反应,因为如果动画属性的值中没有更改,则没有动画。
知道这一点,解决方案是显而易见的。当您进入后台,或者由于任何原因停止动画时,将视图放回原来的位置。现在,当您再次启动动画时,视图可以在某处进行动画处理。