2011-06-13 214 views
1

我注意到,使用UIView類方法的UIView動畫似乎或多或少地把程序放在「暫停」上直到它們完成。UIView動畫延遲

有沒有辦法讓動畫開始,例如,持續3秒,當它是動畫時,程序的其他方面仍在運行,接受觸摸事件等?

+0

那些其他方面可以在另一個線程(而不是默認UI線程等)運行,但我需要看到你的代碼提示別的。 – Tom 2011-06-13 01:07:58

+0

在動畫過程中線程和運行循環都不會被阻塞,只需觸摸事件即可。 (並且僅在默認情況下) – 2011-06-13 01:20:29

+0

啊,好的。這可能是我所看到的。那麼在動畫過程中你無法接收到觸摸事件?如果一個小UIView在幾秒鐘內進行阿爾法淡入淡出,程序將不會接受屏幕上其他任何地方的觸摸事件? – johnbakers 2011-06-13 01:22:04

回答

4

是的,UIKit默認阻止動畫過程中的交互。要覆蓋,設置UIViewAnimationOptionAllowUserInteraction

[UIView animateWithDuration:0.3 delay:0.0 
        options:UIViewAnimationOptionAllowUserInteraction 
       animations:^ 
{ 
    // ... 
} completion:NULL]; 
+0

謝謝先生。它做到了。 – johnbakers 2011-06-13 01:57:18

1

UIKit不是線程安全的,所以所有這些動畫必須在主線程上發生 - 而不是在後臺線程上。爲了從蘋果文檔引用:

線程

注意事項手法 到應用程序的用戶界面 必須在主線程上發生。因此, 您應該始終調用 中的UIView類的方法,該代碼在 應用程序的主線程中運行。 唯一需要的時候可能不是嚴格的 是創建視圖 對象本身;但所有其他的 操作應該發生在主線程 線程上。