2011-07-14 8 views
3

これは私の最初の質問です。こんにちは皆さん。私は今、次の問題の周りに私の心をラップし、解決策を思い付くことができなかったいくつかの時間を過ごしました。誰かが私を正しい方向に向けることができれば嬉しいです。CGContextの静的背景

私はCGContextを使用して、少なくとも50fpsの妥当なフレームレートでリフレッシュする必要があるライブデータのグラフィカルな表現を描画します。静的な画像をバックグラウンドとして使用したい。サイクルごとにコンテキストを使用してこのイメージを再描画すると、フレームレートが大幅に低下します。私はちょうどUIImageViewを使ってイメージを一度表示すると考えました。ここでの問題は、レイヤーごとにアルファ値を設定するだけでなく、より洗練されたオーバーレイを実現するために、CGContextで提供されるブレンドモードを使用することです。背景画像を表示するUIImageViewはコンテキストの一部ではないため、blendmodesの影響を受けません。誰もフレームレートにあまり影響を与えずに、望ましい動作を達成する方法を知っていますか?ご協力いただきありがとうございます。

答えて

0

CGImageRefと呼び出すと、CGRectと同じサイズのディメンションが高速です。 CGImageRefを、ビューの初期化コードなど、すべてのフレームよりも頻繁に実行されないコードの背景イメージとともに設定します。この背景イメージが変化している場合、描画リフレッシュコードではなく、プログラムロジックコードでイメージを構築します。

最悪の場合、毎回ファイルから画像にアクセスすることができます。より重いオブジェクトの中からCGImageRefにアクセスしないと、時間を節約することができます。 [someUIImageObject CGImage]のようなコールでは、メッセージ送信のオーバーヘッドが追加されますが、描画コードを含む同じオブジェクトのCGImageRefタイプivarへのアクセスには影響しません。

ソースイメージのサイズが適切でない場合は、最初に必要なサイズのCGImageRefに描画し、描画コードで再利用してください。

+1

ご返信ありがとうございます。 ** CGImageRef **を最初から使ってみました。その前に、私は** UIImageの** drawInRectを使っていました。これは対応する** CGImageRef **を使ってイメージをコンテキストに描画します。残念ながら、パフォーマンス面では目立った改善はありませんので、おそらく別の解決策を見つける必要があります。あなたの助けをもう一度ありがとう。 –