CATransition
をシャッフルするためにa を使用してCALayer
いますUIView
(UIView
フルスクリーンではありません)。新しいレイヤーは右から入り、古いレイヤーは左に出ます。のCAlayer
content プロパティは に設定されていCGImageRef
ます。関連するコードであると私が信じているものは次のとおりです。
CATransition *transition = [CATransition animation];
transition.duration = transitionTime;
transition.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
transition.type = kCATransitionPush;
transition.subtype = kCATransitionFromRight;
transition.delegate = self;
[view.layer addAnimation:transition forKey:nil];
// onDeck is the layer stage-right and is about to enter
[view.layer addSublayer:onDeck];
// onStage is the layer currently in the middle of the view and is exiting
if (onStage)
[onStage removeFromSuperlayer];
このアニメーションが発生し、1 秒の一時停止があり、その後、新しい画像がアニメーション化されます。これはシミュレーターではうまく機能しますが、私の第 2 世代の iPod Touch では、アニメーションに時折問題が発生します。具体的には、アニメーション化されているレイヤーが、現在表示されているレイヤーの上でちらつきます。これらのちらつきは一定ではありませんが、目立ちます。
可能性のある原因を絞り込んだのは、この移行の背後で行っているバックグラウンド アニメーションです。CAlayer
バックグラウンドで全画面ビューに出入りする数十の があります。これらのバックグラウンド アニメーションを削除するか、トランジションのアニメーション期間をより長い期間 (2 秒以上) に設定すると、アニメーションは正常に実行されます (アニメーション時間を 0.75 秒にしたいと思います)。
私の最初の考え (これは上記の観察によって裏付けられているようです) は、CoreAnimation (少なくとも私の iPod では) を強く押しすぎており、妥協する必要があるということです。これを受け入れるのに苦労している理由は、この時折のちらつきを除けば、シーンが非常にうまくレンダリングされる (遅延がほとんどまたはまったくない) ためです。
この問題、または一般的な CoreAnimation の最適化について誰かが意見を持っている場合は、非常に感謝しています!
読んでくれてありがとう
アップデート:
これを iPhone 4 でテストする機会がありましたが、ちらつきは発生しませんでした。さらに、CoreAnimation インストゥルメントは、私の第 2 世代の iPod Touch で、FPS が一貫して 40 秒台後半から 50 秒台/半ばになることを確認しました。