iPhoneのQuartz描画とプリベイクドイメージのパフォーマンスの違い(Quartz対Quartzに簡略化されていると思います)

StackOverflow https://stackoverflow.com/questions/1604341

質問

Quartzの初心者で、単純な形状、グラデーション、影の描画速度に興味があります。具体的には、iPhoneでのQuartz描画関数とQuartz画像描画を比較します。

塗りつぶし、ストローク、および影付きの四角形を描画する必要があるとします。プリベークされた四角形をPNGとしてインポートし、drawInRect:またはdrawAtPoint:を使用して描画することは、Quartzの描画関数を使用して同じものを描画するよりも高速であると想定しています。一方、イメージを描画すると、イメージをインポートしてから割り当てる必要があるため、メモリ使用量とアプリケーションサイズが増加すると想定します。これは正しいですか?

それ以外に、どちらの手法にも大きな利点/欠点はありますか?グラフィックプログラムに精通していて、Quartzを初めて使用する人として、UI全体をプリベークして画像をインポートするのではなく、コードで描画関数を使用する利点があるかどうかを判断しようとしています。

役に立ちましたか?

解決

同様の質問があったので、異なるアプローチをタイムアウトしました。ほとんどの単純な描画の場合(長方形の例のように)、ディスクからのイメージの読み込みは、おそらくディスクへのアクセスが必要なため、描画するよりも少し遅いように見えました。そのような場合、Quartzの描画ルーチンを使用することに決めましたが、それは単にそれらが提供する柔軟性のためです。将来的にUI要素のサイズを変更する場合(おそらく、より大きなまたはより高い解像度のディスプレイをサポートするために)、ベクター描画が必要に応じてスケーリングされるすべての画像を再レンダリングする必要があります。

パフォーマンスの大幅な向上が見られた領域の1つは、背景として描画する大きな放射状グラデーションです。 Sharkでは、CGContextDrawRadialGradient()呼び出しが多くのCPU時間を消費していることがわかりました。クォーツで描かれた放射状グラデーションを静的な画像に置き換えたとき、アプリケーションの起動時間の大幅な短縮が見られました(この背景はアプリケーションの起動時に配置されます)。奇妙なことに、アプリケーションのメモリ使用量が約0.5 MB削減されましたが、これについては完全には説明できません。

これを自分でテストしたい場合は、画像エディター不透明度を選択することを強くお勧めします。図面のクォーツコード(完全なUIViewまたはCALayerサブクラスを含む)、および同じ図面のPNGを出力します。これにより、アプリケーション内に両方のパスを実装してテストするのは簡単です。

他のヒント

アプリケーションの構造に応じて機能する中間点もあります。描画コードを実装しますが、レイヤーに描画してから再利用します。これには、CPU時間を複数回噛まないという利点がありますが、それでも描画プロセスを動的に保つことができます。

つまり、The Tabletがついに出荷されたら(いつでも!!)、さまざまな静止画像を生成するのではなく、描画パラメーターを少し修正して、考えられるすべてのデバイスをカバーできます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top