2012-01-28 40 views
5

我有一個CALayer,我只是在控制器的initWithNibName中創建並添加到我的視圖控制器主視圖的子視圖中: 然後,我執行以下動畫:如何檢測CATransaction觸發的動畫完成

[CATransaction begin]; 
    [CATransaction setAnimationDuration:2]; 
    [logoLayer setOpacity:0]; 
    [CATransaction commit]; 

如何知道此動畫何時完成? performSelector:延遲2秒。方法似乎並不是「正確的方式」去實現它。

回答

22

根據doc,[CATransaction setCompletionBlock:]可以用於你想要的。

它說

完成塊的對象保證被立即調用(在主線程),其隨後由該事務組加入所有動畫已經完成(或已被移除。)如果沒有動畫在當前事務組被提交之前被添加(或者完成塊被設置爲不同的值),該塊將被立即調用。

嘗試在你動畫事務處理之前添加類似這樣的內容begin

[CATransaction setCompletionBlock:^{ 
    // Action after the animation completion 
}]; 
+5

該文檔中的操作詞是「隨後」。不要認爲(如我第一次那樣)完成塊適用於整個事務。它僅適用於設置後添加到事務中的動畫。 – 2013-01-19 04:10:01