应用程序进入后台会中断UIView动画的状态是什么?

时间:2014-08-14 08:12:14

标签: ios cocoa-touch uiview uiviewanimation

如果我使用动画将视图从一个位置移动到另一个位置,并将该应用程序放入期间那个动画中,当我恢复该应用时,它会使用{{1}点击完成块是finished?如果是这样,是否意味着视图位于两个位置之间,或者它是否会在动画中断时强制视图成为最终位置?

1 个答案:

答案 0 :(得分:0)

首先,UIView动画对于那些不熟悉它们的人来说,并不是那么直观。当您通过在动画块中设置视图的帧来请求隐式动画时,视图的帧将立即设置为新值。只有视图的presentationLayer是动画的。

测试这个行为很容易。创建一个新的单一视图项目,为简单起见关闭自动布局,向视图添加一个按钮,并将该按钮操作连接到这样的函数:

- (IBAction)buttonPush:(UIButton *)sender {
    CGPoint newCenter = CGPointMake(self.view.bounds.size.width/2, 0);
    if (sender.center.y < self.view.bounds.size.height/2){
        newCenter.y = (self.view.bounds.size.height - (sender.frame.size.height / 2));
    } else {
        newCenter.y = (sender.frame.size.height / 2);
    }


    [UIView animateWithDuration:5.0
                     animations:^{
                         sender.center = newCenter;
                     }
                     completion:^(BOOL finished){
                         NSLog(@"Finished? = %@",(finished)?@"YES":@"NO");
                     }];
}

此代码只是找出按钮位于屏幕的上半部分还是下半部分,然后在中心顶部或中间底部找到一个点,并在那里 非常缓慢地按下按钮 即可。它还记录天气与否,动画完成。

如果您尝试使用此代码,请按主页按钮,然后重新输入应用程序,您会发现动画按钮现在位于目的地。

其次,在上述情况下,您会发现传入完成块的BOOL设置为NO。在您计划链接动画的情况下,此BOOL可以非常方便。显然,如果不允许第一部动画完成,那么你很有可能不想开始后续动画。