UIViewアニメーションブロックを使用して、ディスプレイ上の複数のレイヤーのCALayerプロパティ(この場合はbackgroundColor)を一度にアニメーション化します。
すべてのレイヤーは不透明で、基本的にこのように、すべてを1つのブロックでアニメーション化しています。
[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ピクセルです。
特にQuartz2Dなどについて多くの満足のいくものを読んだ後、これがどれほどパフォーマンスが悪いかに少しショックを受けました。ここで基本的な何かを見逃しているに違いないと思います。
ヘルプ!