3

CATransitionをシャッフルするためにa を使用してCALayerいますUIView(UIViewフルスクリーンではありません)。新しいレイヤーは右から入り、古いレイヤーは左に出ます。のCAlayercontent プロパティは に設定されてい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 秒台/半ばになることを確認しました。

4

2 に答える 2

0

すべての影 (影がある場合) を取り除き、パフォーマンスが向上するかどうかを確認します。シャドウ、特に CAShapeLayers のシャドウがアニメーションの滑らかさに大きな影響を与えることを確認しました。

于 2011-05-16T23:01:26.383 に答える
0

推測ですが、CATransactions の管理を試みたことはありますか?

次のように、変更をシーンにブラケットしてみてください。

[ CATransaction begin ]
... your animations ...
[ CATransaction commit ] ;
于 2011-05-17T05:08:39.590 に答える