为什么-animateWithDuration:delay:options:animations:completion:阻止UI?

时间:2012-04-01 19:10:22

标签: iphone ios ipad uikit core-animation

我一直认为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进行测试。

2 个答案:

答案 0 :(得分:19)

查看UIView的文档,我在该方法的讨论部分找到了这个:

  

在动画期间,对正在设置动画的视图暂时禁用用户交互。 (在iOS 5之前,对整个应用程序禁用用户交互。)如果希望用户能够与视图交互,请在options参数中包含UIViewAnimationOptionAllowUserInteraction常量。

因此,如果您希望继续允许用户交互,则必须在options参数中设置此常量。

答案 1 :(得分:5)

文档是你的朋友:)

UIView Class Reference

animateWithDuration下:动画:

“在动画期间,对于正在设置动画的视图暂时禁用用户交互。(在iOS 5之前,整个应用程序都禁用了用户交互。)”

当然,对于动画视图下的所有视图。