如果我使用动画将视图从一个位置移动到另一个位置,并将该应用程序放入期间那个动画中,当我恢复该应用时,它会使用{{1}点击完成块是finished
?如果是这样,是否意味着视图位于两个位置之间,或者它是否会在动画中断时强制视图成为最终位置?
答案 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
可以非常方便。显然,如果不允许第一部动画完成,那么你很有可能不想开始后续动画。