17

正確にどのようなパフォーマンスが重要なことに注意する必要がありますか?

できるだけ多くの例を含むリストが必要です。または、ベストプラクティスのリスト。

4

1 に答える 1

51

オフスクリーンレンダリング/CPUでのレンダリング

グラフィックパフォーマンスの最大のボトルネックは、オフスクリーンレンダリングとブレンディングです。これらは、アニメーションのすべてのフレームで発生する可能性があり、スクロールが途切れる可能性があります。

オフスクリーンレンダリング(ソフトウェアレンダリング)は、GPUに渡す前にソフトウェア(オフスクリーン)で描画を行う必要がある場合に発生します。ハードウェアは、テキストレンダリングと、マスクとシャドウを使用した高度なコンポジションを処理しません。

以下は、オフスクリーンレンダリングをトリガーします。


ブレンディング

  • resizableImageブレンディングを引き起こす可能性があります。
    iOSでresizableImagesを使用する場合のブレンドレイヤーの回避

  • 1.0未満でopaqueあり、1.0未満のレイヤーbackgroundColoralpha

  • alpha1.0未満のレイヤー

  • アルファチャネルを備えたレイヤーlayer.contentまたはアルファチャネルを備えたレイヤーUIImageViewUIImage


レイアウト

layoutSubviewsUIViewで呼び出されるトリガーは次のとおりです。

  • bounds同じビューとスーパービューでトリガーを変更する

  • frame同じビューとスーパービューでトリガーを変更する

  • スーパービューの変更transformまたはlayer.transformトリガー

注:値が実際に変化している実際の変化を指している

矛盾するこれらの変更は、layoutSubviews呼び出されるトリガーにはなりません:、、、、、。centerlayer.positionlayer.zPositionlayer.anchorPointlayer.anchorPointZ

参照:https ://github.com/hfossli/LayoutSubviewsInconsistency


パフォーマンスを向上させるための一般的なヒント

  • blend多くの場合、よりも優れていrender offscreenます。

  • drawRect:複数のラベルとサブビューを持つビューを使用する代わりに、を使用することを検討してください。

  • UIImageバックグラウンドキューでまたはに描画しますCGImageRef

  • (に比べてCGLayerキャッシュが優れている)に描画し、必要なものを描画します。 更新しないでください:http://iosptl.com/posts/cglayer-no-longer-recommended/GPUUIImage

  • 階層をフラット化する

  • ビューを再利用する–スクロール中に新しいビューを作成および追加しないでください

  • opaque背景色が無地のビューがあります

  • 1.0未満に設定することはalpha避けてくださいlayer.opacity

  • 有効layer.shouldRasterizeにします(注意して使用してください)。個人的にはこれを避けたいのですが、レイヤーのラスターがキャッシュされて再利用されるため、パフォーマンスが向上する場合があります。shouldRasterizeコンテンツまたはサブレイヤーのコンテンツを頻繁に変更するとパフォーマンスが低下するレイヤーを有効にすると、iOSは変更のたびにレイヤーをラスター化し続けるため、覚えておいてください。


リンク

于 2012-11-30T16:27:36.140 に答える