正確にどのようなパフォーマンスが重要なことに注意する必要がありますか?
できるだけ多くの例を含むリストが必要です。または、ベストプラクティスのリスト。
正確にどのようなパフォーマンスが重要なことに注意する必要がありますか?
できるだけ多くの例を含むリストが必要です。または、ベストプラクティスのリスト。
グラフィックパフォーマンスの最大のボトルネックは、オフスクリーンレンダリングとブレンディングです。これらは、アニメーションのすべてのフレームで発生する可能性があり、スクロールが途切れる可能性があります。
オフスクリーンレンダリング(ソフトウェアレンダリング)は、GPUに渡す前にソフトウェア(オフスクリーン)で描画を行う必要がある場合に発生します。ハードウェアは、テキストレンダリングと、マスクとシャドウを使用した高度なコンポジションを処理しません。
以下は、オフスクリーンレンダリングをトリガーします。
マスク付きのレイヤー(layer.mask
)
layer.masksToBounds
/view.clipsToBounds
がtrueであるすべてのレイヤー
layer.allowsGroupOpacity
YESに設定されlayer.opacity
、1.0未満
のレイヤービュー(またはレイヤー)でオフスクリーンレンダリングが必要になるのはいつですか?
ドロップシャドウ(layer.shadow*
)のあるレイヤー。
修正方法のヒント:https ://markpospesel.wordpress.com/tag/performance/
layer.shouldRasterize
真である任意のレイヤー
layer.cornerRadius
、、layer.edgeAntialiasingMask
を含む任意のレイヤーlayer.allowsEdgeAntialiasing
layer.borderWith
とlayer.borderColor
?_
参照/証明がありません
UILabel
テキスト( 、、、などCATextLayer
を含むあらゆる種類Core Text
)。
CGContext
で行うほとんどの図面drawRect:
。空の実装でも画面外にレンダリングされます。
resizableImage
ブレンディングを引き起こす可能性があります。
iOSでresizableImagesを使用する場合のブレンドレイヤーの回避
1.0未満でopaque
あり、1.0未満のレイヤーbackgroundColor
alpha
alpha
1.0未満のレイヤー
アルファチャネルを備えたレイヤーlayer.content
またはアルファチャネルを備えたレイヤーUIImageView
UIImage
layoutSubviews
UIViewで呼び出されるトリガーは次のとおりです。
bounds
同じビューとスーパービューでトリガーを変更する
frame
同じビューとスーパービューでトリガーを変更する
スーパービューの変更transform
またはlayer.transform
トリガー
注:値が実際に変化している実際の変化を指している
矛盾するこれらの変更は、layoutSubviews
呼び出されるトリガーにはなりません:、、、、、。center
layer.position
layer.zPosition
layer.anchorPoint
layer.anchorPointZ
参照:https ://github.com/hfossli/LayoutSubviewsInconsistency
blend
多くの場合、よりも優れていrender offscreen
ます。
drawRect:
複数のラベルとサブビューを持つビューを使用する代わりに、を使用することを検討してください。
UIImage
バックグラウンドキューでまたはに描画しますCGImageRef
。
(に比べてCGLayer
キャッシュが優れている)に描画し、必要なものを描画します。
更新しないでください:http://iosptl.com/posts/cglayer-no-longer-recommended/GPU
UIImage
階層をフラット化する
ビューを再利用する–スクロール中に新しいビューを作成および追加しないでください
opaque
背景色が無地のビューがあります
1.0未満に設定することはalpha
避けてくださいlayer.opacity
有効layer.shouldRasterize
にします(注意して使用してください)。個人的にはこれを避けたいのですが、レイヤーのラスターがキャッシュされて再利用されるため、パフォーマンスが向上する場合があります。shouldRasterize
コンテンツまたはサブレイヤーのコンテンツを頻繁に変更するとパフォーマンスが低下するレイヤーを有効にすると、iOSは変更のたびにレイヤーをラスター化し続けるため、覚えておいてください。