2014-10-07 70 views
2

我想更好地理解這個話題。可以說我想做一些非常酷的動畫,如下所示瞭解iOS的UIView動畫塊和dispatch_async(dispatch_get_main_queue)塊

- (void)coolAnimation 
{ 
    [UIView animateWithDuration: some duration 
        animations:^{ some animation }]; 
} 

由於它的動畫塊,它會自動添加到main_queue嗎?或者對於最佳做法,我應該總是將UI更新添加到main_queue中,如下所示。

dispatch_async(dispatch_get_main_queue(), ^{ 
    [self coolAnimation]; 
}); 

回答

8

無論您在哪裏撥打[UIView animateWithDuration:animations:],塊的內容都在主線程中執行。最好讓操作系統運行你的動畫;動畫線程不會阻塞主線程 - 只有動畫塊本身。

[UIView animateWithDuration:animations:]以非常高級別的手勢波形來評估您的區塊並確定其中每個可生成動畫值的函數。操作系統有一個動畫線程,它用作幀計時器,然後在每個時間片上它會將主線程上的更新發送到具有進度值的動畫屬性。 (您可以在您的PresentationLayer上檢查這些值的當前狀態。)

1

你通過動畫塊稱爲立即。無需使用任何隊列。