2012-04-01 63 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