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

Pro*_*ber 7 iphone core-animation uikit ipad ios

我一直认为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];
                    }
                 }];
Run Code Online (Sandbox Code Playgroud)

就像你可以看到持续时间很长,因此可以清楚地看到UI交互在动画时被阻止.

当动画开始时,UI交互开始被阻止,并且在动画结束时结束被阻止.

有没有办法同时启动UIView动画,以便不阻止UI交互?

编辑澄清:我知道UI被阻止,因为我不能与屏幕上的任何控件交互为什么这个动画运行.那些其他控件与动画内容无关,并且不在视图层次结构中的同一分支上.此动画运行时,将阻止整个UI.当我将其设置为10秒时,UI会在动画运行时被阻止10秒.在iPhone 4上使用iOS 4.2进行测试.

jms*_*617 19

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

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

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


Rok*_*arc 5

文档是你的朋友:)

UIView类参考

animateWithDuration下:动画:

"在动画期间,对于要动画的视图暂时禁用用户交互.(在iOS 5之前,对整个应用程序禁用用户交互.)"

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