正確にどのようなパフォーマンスが重要なことに注意する必要がありますか?
できるだけ多くの例を含むリストが必要です。または、ベストプラクティスのリスト。
正確にどのようなパフォーマンスが重要なことに注意する必要がありますか?
できるだけ多くの例を含むリストが必要です。または、ベストプラクティスのリスト。
グラフィックパフォーマンスの最大のボトルネックは、オフスクリーンレンダリングとブレンディングです。これらは、アニメーションのすべてのフレームで発生する可能性があり、スクロールが途切れる可能性があります。
オフスクリーンレンダリング(ソフトウェアレンダリング)は、GPUに渡す前にソフトウェア(オフスクリーン)で描画を行う必要がある場合に発生します。ハードウェアは、テキストレンダリングと、マスクとシャドウを使用した高度なコンポジションを処理しません。
以下は、オフスクリーンレンダリングをトリガーします。
マスク付きのレイヤー(layer.mask)
layer.masksToBounds/view.clipsToBoundsがtrueであるすべてのレイヤー
layer.allowsGroupOpacityYESに設定され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未満のレイヤー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は変更のたびにレイヤーをラスター化し続けるため、覚えておいてください。