2013-01-31 176 views
0

只是想清除一件事情,在iOS動畫開始線程但開始之前,它是否等待主UI線程完成。一旦動畫開始,那麼你可以在主線程中做任何事情時間。ios動畫開始延遲

[UIView transitionFromView:currentVisible 
           toView:reuseablView 
           duration:0.6 
           options:(UIViewAnimationOptionTransitionCurlUp|UIViewAnimationOptionShowHideTransitionViews)    
          completion:^(BOOL finished) { 
           } 
          }]; 

[self callFunction1]; 

在這裏,動畫以非常小的延遲開始,我認爲它等待functioin1調用。

任何想法?

+0

...現在請用英文, – holex

+0

你是從一些網絡操作調用這個方法嗎? – agibson007

回答

0

當您撥打[self callFunction1]時,您將阻止主線程,因此任何動畫都將停止(或者在這種情況下,尚未啓動)。如果這是一個長時間運行的方法,您應該將其移至另一個線程。

+0

但動畫是在單獨的線程中啓動的,你的意思是在動畫開始之前,主線程應該是空閒的? –

+0

所有繪圖都是在主線程上完成的,它在動畫過程中不應該運行任何東西。 –

+0

好吧,你的意思是動畫在單獨的線程中啓動,但它的UI繪圖是在主線程上完成的,所以在那段時間主線程應該是空閒的。否則繪圖將被阻塞。 –

0

動畫應該在主線程上啓動,儘管它實際上是在高於應用程序訪問的線程上執行的,所以它仍然可以在阻塞時執行,因爲核心動畫呈現服務器的工作方式。確保你不從一些網絡代碼中調用此函數。它在主線程上。如果第二種方法阻止,動畫可能會繼續,但應用程序和觸摸事件在阻止時不起作用。如果第二種方法阻塞的時間足夠長,動畫的延遲可能會導致它不能及時發射。但一旦開始動畫應該很好,即使下一個方法阻止。我建議你不要阻塞主線程。如果您希望在動畫之後調用該方法,它應該位於完成塊中。

最後要證明這一點,您可以先調用動畫然後調用sleep。您的應用程序將無響應,但動畫將繼續。