为什么是-animateWithDuration:延迟:选项:animation:完成:阻止用户界面?

我一直认为核心animation在背景上执行animation。 当我运行这个代码时,我的UI交互被阻塞,直到animation结束:

[UIView animateWithDuration:4.5 delay:0 options:options animations:^{ oldView.alpha = 0; newView.alpha = 1; } completion:^(BOOL finished) { if (finished) { [oldView removeFromSuperview]; } }]; 

就像你可以看到的持续时间很长,所以清晰可见的UIanimation屏蔽。

当animation开始时UI交互开始被阻止,并且当animation结束时结束被阻止。

有没有办法同时启动一个UIViewanimation,所以UI交互没有被阻止?

编辑澄清:我知道UI被阻止,因为我无法与屏幕上的任何控制交互,为什么这个animation运行。 那些其他控件与animation不相关,并且不在视图层次结构的同一分支上。 当这个animation运行时,整个用户界面被阻塞。 当我将其设置为10秒时,UI会在animation运行时被阻止10秒。 在iPhone 4上testingiOS 4.2。

看看UIView的文档,我在这个方法的讨论部分find了这个:

在animation过程中,用户交互暂时停用,以便animation显示视图。 (在iOS 5之前,整个应用程序都禁用用户交互。)如果您希望用户能够与视图进行交互,请在options参数中包含UIViewAnimationOptionAllowUserInteraction常量。

所以,如果你希望继续允许用户交互,你必须在options参数中设置这个常量。

文档是你的朋友:)

UIView类参考

animateWithDuration下:animation:

“在animation过程中,用户交互被暂时停用,以便animation显示视图(在iOS 5之前,整个应用程序都禁用了用户交互)”

当然,在animation视图下的所有视图。