2009-01-06 73 views
5

我有一個情況,我有許多CALayers以「基於回合」的方式進行動畫製作。我爲每個CALayers上的位置製作動畫,但他們有完全相同的持續時間。一旦所有這些CALayers都完成了動畫,一個新的「轉向」被啓動並且他們再次動畫改變位置。使用核心動畫,有沒有辦法爲幾個CALayers分組動畫?

整個想法是,在位置之間以恆定速度進行線性插值時,狀態與狀態之間的基於回合的轉換看起來像實時動畫。然而,這與許多不同的CALayer很難實現。

CAAnimationGroup用於將單個CALayer上的動畫組合在一起。但我想知道,是否有一種簡單的解決方案,將幾個CALayers中的動畫組合在一起,這些動畫應該具有相同的持續時間?

編輯,包括凱文·巴拉德提出的問題的答覆

我的問題就在於此。我爲每個CALayers創建動畫,然後將這些動畫放入NSArray中。一旦我得到個別動畫結束的回調,我將它從NSArray中移除。一旦它是空的,我再次爲他們創建動畫。

比幾層更多的,還有所有的動畫的結束和新的開始之間明顯的延遲。

我想如果我可以將所有這些動畫分組到一個動畫中,可以在動畫之間沒有延遲地動畫更多的圖層。從而不會破壞連續動畫的幻想。

回答

5

如果您使用單一方法將動畫添加到多個CALayer,它們將全部從(有效)同時開始。我將這種方法用於帶有滴球的益智遊戲,在動畫結束時,我將動畫的下一個階段附加到需要進一步動畫的任何球上。

我一次可以動畫多達60個CALayers,並且在動畫的各個階段之間沒有任何延遲,但是我不會將動畫緩存到任何類型的數組中,我不確定您有多少動畫那裏。

我的動畫比較簡單,創建並附加到每個CALayer上。我的精靈是60px的正方形,並使用幾十個可能的圖像來表示他們的內容。

在某些情況下,我可以使用不同的開始時間創建多個動畫(使用beginTime),我將它們與CAAnimationGroup捆綁在一起 - 但您可能無法預先計算後續動畫。

0

如果您同時向3個不同的圖層添加3個動畫,並且它們具有相同的持續時間,我希望它們全都可以一起動畫。你看到什麼行爲?

+0

我在主要問題中編輯了對此查詢的回覆,因爲它不適合在這裏。 – 2009-01-07 13:45:55

2

如果將動畫包裝在CATransaction中,CG將確保它們都在主循環的同一次迭代中運行。

[CATransaction begin]; //所有動畫 [CATransaction commit];

0

cp21yos:你能說說你的方法嗎?我正在嘗試做類似的事情,這涉及到多次動畫幾個圖層。你說過:「在動畫結尾處,我附加動畫的下一個階段」。你能解釋一下嗎?當我嘗試將邏輯在animationDidStop事件中執行其他動畫時,只有最後一個動畫出現,而不是整個動畫序列。