我一直认为Core Animation会在后台执行动画。当我运行此代码时,我的UI交互将被阻止,直到动画结束:
[UIView animateWithDuration:4.5
delay:0
options:options
animations:^{
oldView.alpha = 0;
newView.alpha = 1;
}
completion:^(BOOL finished) {
if (finished) {
[oldView removeFromSuperview];
}
}];
就像您可以看到持续时间很长,因此可以清楚地看到UI动画在动画时被阻止。
动画开始时,UI交互开始被阻止,动画结束时结束被阻止。
有没有办法同时启动UIView动画,因此不会阻止UI交互?
编辑澄清:我知道用户界面被阻止了,因为我无法与屏幕上的任何控件进行交互,为什么这个动画正在运行。那些其他控件与动画内容无关,并且不在视图层次结构中的同一分支上。此动画运行时,将阻止整个UI。当我将其设置为10秒时,UI会在动画运行时被阻止10秒。在iPhone 4上使用iOS 4.2进行测试。
答案 0 :(得分:19)
查看UIView的文档,我在该方法的讨论部分找到了这个:
在动画期间,对正在设置动画的视图暂时禁用用户交互。 (在iOS 5之前,对整个应用程序禁用用户交互。)如果希望用户能够与视图交互,请在options参数中包含UIViewAnimationOptionAllowUserInteraction常量。
因此,如果您希望继续允许用户交互,则必须在options参数中设置此常量。
答案 1 :(得分:5)
文档是你的朋友:)
在 animateWithDuration下:动画:
“在动画期间,对于正在设置动画的视图暂时禁用用户交互。(在iOS 5之前,整个应用程序都禁用了用户交互。)”
当然,对于动画视图下的所有视图。