シミュレータで、[デバッグ] → [カラーブレンドレイヤー]を選択します。赤は悪いです、緑は良いです。
より正確には、赤はGPUがアルファブレンドを実行する必要があることを意味します。主なコストは、ピクセルを2回描画し、場合によっては余分なテクスチャを再フェッチするために必要なメモリ帯域幅にあります。完全に透明なピクセルは本当に悪いです。
コアグラフィックスに飛び込む前に検討する必要がある3つの修正(すべて赤の量を減らす):
- 可能な場合は、ビューを不透明にします。背景がに設定されているラベルは、
[UIColor clearColor]
多くの場合、代わりに単色に設定できます。
- 透明度のあるビューをできるだけ小さくします。ラベルの場合、これには
-sizeToFit/-sizeThatFits:
レイアウトの適切な使用と調整が含まれます。
- 不透明な画像からアルファチャネルを削除します(たとえば、セルの背景が画像の場合)—一部の画像エディタはこれを行いません。これは、GPUがアルファテストを実行する必要があり、画像の背後にあるものをレンダリングする必要があることを意味します。
さらに、[カラーオフスクリーンレンダリング]をオンにします(おそらく、[カラーブレンドレイヤー]をオフにした後、見やすくなります)。オフスクリーンでレンダリングされたものは黄色で表示され、通常はレイヤーマスクを適用したことを意味します。これらはパフォーマンスに非常に悪い可能性があります。CoreAnimationがマスクされた結果をキャッシュするかどうかはわかりません。
最後に、設定することでCoreAnimationにセルをラスタライズさせることができますcell.layer.shouldRasterize = YES
(網膜デバイスでも必要cell.layer.rasterizationScale = [[UIScreen mainScreen].scale
になる場合があります。これが自動的に行われるかどうかは忘れます)。主な利点は、簡単であり、CoreGraphicsで画像ビューを自分でレンダリングするよりも効率的であるということです。(テキストはCPUでレンダリングする必要があるため、ラベルのメリットは少なくなります。)
また、ビューアニメーションが影響を受けることに注意してください。CALayer.shouldRasterizeの設定が何をするかを忘れています(アニメーションのフレームごとに再ラスタライズする可能性があります。これは、画面に1回だけ描画される場合は少し無駄です)が、Core Graphicsを使用すると(デフォルトで)レンダリングが引き伸ばされますアニメーション中のコンテンツ。CALayer.contentsGravityを参照してください。