iOSオフスクリーンレンダリングの解析と処理方法

画面やレイヤーを、画面に直接描画するのではなく、GPU レベルで描画するオフスクリーンレンダリング

  1. 角丸りや影あり:ビューやレイヤーに角丸や影などのエフェクトが設定されていると、オフスクリーンレンダリングが発生する。これは、角丸や影はビューやレイヤーを切り抜いたりブレンドしたりする処理が必要で、直接画面上でレンダリングできないため。

対処方法:可能な限り、角丸のビューやシャドウのあるビューでオフスクリーンレンダリングを使用しないようにします。 オフスクリーンレンダリングがトリガされるのを減らすには、以下の方法があります。

  1. 離散レンダリングの回数を減らすため、`UIView` の `layer.cornerRadius` プロパティを置き換えて、`CALayer` の `cornerRadius` プロパティを使用します。
  2. UIViewの影関連のプロパティ(shadowColor, shadowOffset等)より、可能な限りCALayerの影関連のプロパティ(shadowOpacity, shadowColor, shadowOffset等)で影を実装してください。
  1. 透明度が1より小さい属性をビューやレイヤーが設定すると、オフスクリーン描画がトリガされます。これは、透明度の計算ではビューやレイヤーのクリッピングと合成操作が必要となるためです。

オフスクリーンレンダリングは、不透明度が 1 未満のビューまたはレイヤー上で可能な限り使用しないようにします。オフスクリーンレンダリングの発生を軽減する方法を以下に示します。

  1. ビューやレイヤーの不透明度を1に設定するか、不透明度1未満の設定は可能な限り回避します。
  2. 透明度を持つビューにサブビューを追加すると、ビュー階層の複雑さが増すため、可能な限り避けてください。
  1. マスク
  2. ラスター化するべきかどうか

対処策: 上記の的属性および操作の使用を極力避けるか、適切に利用すること。オフスクリーンレンダリングの発生を軽減するには、以下の方法が考えられる

  1. マスク属性を持つビュー上でオフスクリーンレンダリングを使用しないでください。
  2. shouldRasterizeプロパティを適切に設定し、不要なオフスクリーンレンダリングを回避する。

iOSでオフスクリーンレンダリングを回避するために、まず

  1. 角丸処理や影などのエフェクトはできるだけ使わないか、控えめにする
  2. ビューとレイヤーの不透明度はできるだけ1よりも大きくする。
  3. mask、shouldRasterize プロパティは極力避けるか、適切な使用を心がける。

適正な処理や最適化を図ることで、離れ画面描画がiOSアプリのパフォーマンスに及ぼす影響を低減し、アプリの滑らかさと応答速度を向上できます。

bannerAds