0

私は多数の CALayers (~1000) を持つ UIView を持っています。それぞれのコンテンツには小さな画像があります。この UIView はスクロールビューのサブビューです (実際には、スクロールビューのサブビューである別のビューのサブビューです)。これは、最初は比較的速く描画されます (数秒)。ただし、スクロールビューでスクロールすると、フレームレートが非常に低くなります。

スクロールするたびに各 CALayer の内容を再描画しようとしていますか? これを無効にする方法はありますか?何か他のことが起こっていますか?

注: UIView で clearsContextBeforeDrawing を NOo に設定しました。

4

2 に答える 2

2

レイヤーは再描画されませんが、GPU を使用して合成されます。ボトルネックが CPU または GPU にあるかどうかを確認するには、Instruments で Sampler および OpenGL ES インストゥルメントを使用してみてください。インストゥルメント名の横にある「i」をタップし、追加のパラメーター (タイラー使用率、レンダラー使用率など) を選択することで、OpenGL ES インストゥルメント内で追加の詳細をログに記録できます。OpenGL 値の 1 つが 100% に近い場合は、合成が妨げられています。ただし、サンプラーが -drawRect: または同様のメソッドへの呼び出しを多数表示している場合は、(何らかの理由で) レイヤーが再描画されており、それが問題である可能性があります。

さらに、コア アニメーション インストゥルメントを使用して不透明でないレイヤーに色を付けることができます。これにより、ディスプレイのフレームレートが低下する可能性があります。

于 2009-09-01T20:03:11.763 に答える
0

needsDisplayOnBoundsChangeレイヤーのプロパティを次のように設定しNOます。

[layer setNeedsDisplayOnBoundsChange:NO];
于 2009-09-01T17:01:22.427 に答える