问题恢复UIVIew动画:ios7?

时间:2014-03-29 19:44:44

标签: ios objective-c animation uiview uiimageview

通过调用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有效),动画仍然会被冻结。

1 个答案:

答案 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 期间放置的地方!

因此没有任何反应,因为如果动画属性的值中没有更改,则没有动画。

知道这一点,解决方案是显而易见的。当您进入后台,或者由于任何原因停止动画时,将视图放回原来的位置。现在,当您再次启动动画时,视图可以在某处进行动画处理。