我正在使用UIView動畫塊爲顯示器上多個圖層上的CALayer屬性(本例中爲backgroundColor)設置動畫。同時對CALayer屬性動畫數量有合理預期?
所有層是不透明的,而我在一個塊動畫的一切,基本上是這樣的
[UIView beginAnimations:@"outer" context:nil];
float duration = .25;
float offset = 0.0;
for(NSArray *viewsInPass in viewQueue) {
for(UIView *innerView in viewInPass) {
[UIView beginAnimations:@"inner" context:nil];
[UIView setAnimationDelay:offset];
[UIView setAnimationDuration:duration];
[innerView.layer setBackgroundColor:[newColor CGColog]];
[UIView commitAnimations];
}
offset += duration;
}
[UIView commitAnimations];
一旦有4-5個併發層動畫的背景顏色也變得非常不連貫,基本上啓動設備完全忽略了渲染速率,只是凍結到剩餘動畫的結尾。所有的視圖不重疊,它們都是不透明的,一般約20x20像素。
我對這種非高性能有些震驚,特別是在閱讀了Quartz 2D等許多令人欣喜的事情之後。我覺得我必須在這裏錯過一些基本的東西!
幫助!
其實這是不正確的。 CAAnimation有一個事務模型,並且事務嵌套,因此它將具有不同開始時間的所有動畫排隊到同一個動畫事務中。如果不這樣做,由於所有的動畫調度開銷,性能會更差。 我已經嘗試過單獨做每個傳遞,並讓每個動畫獨立運行在它自己的事務中,並且它有各種各樣的問題。由於調度抖動較小,NSTimers導致動畫相位不匹配。 animationsDidFinish最終沒有幫助,除了一個額外的選擇器調用。 – groundhog 2010-07-13 11:59:32
如果您的觀點不具有互動性,那麼在單一視圖中轉移到CALayers會有所幫助。 – drawnonward 2010-07-13 16:32:33