2012-04-01 61 views
7

我一直认为Core Animation在背景上执行动画。当我运行这段代码,我的UI交互被阻塞,直到在动画完成:-animateWithDuration:delay:options:animations:completion:阻止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秒。与iOS 4.2的iPhone 4进行测试

+0

你怎么知道它被封锁?除非视图的alpha为零,否则它后面的所有视图都禁用了交互。 – CodaFi 2012-04-01 19:17:23

+0

通过澄清更新了问题。 – 2012-04-01 19:24:59

回答

18

望着用于UIView的文档,我发现这个在这个方法的讨论部分:

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

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

5

文档是你的朋友:)

UIView Class Reference

animateWithDuration:动画:

“在动画,用户交互暂时残疾人(在iOS 5之前,整个应用程序禁用用户交互)。“

当然,对于所有v在动画视图下观看。

+1

我怎么可能错过了!天啊。我需要更大的眼镜。谢谢。 – 2012-04-01 19:24:24

+0

用'UIViewAnimationOptionAllowUserInteraction'尝试jmstone的方法 - 希望它能做到这一点:) – 2012-04-01 19:27:03

+1

它完全可以做到这一点。保存了我的一年。大。 – 2012-04-01 20:51:23