1

描画アプリを作成していますが、問題が発生しました。曲線の配列があります。各曲線は点の配列を保持し、各点はその色、太さ、および座標を保持します。

呼び出されるとdrawRect:、この配列からすべての曲線を再描画します。問題は、この配列が巨大になり、アプリの速度が低下することです。

私の考えは、各再描画の最後に、現在のコンテキストを画像として保存し、曲線配列を解放し、次の再描画でその画像を背景として使用することです。最終的には、曲線の配列はまったく必要ありません。進行中の曲線の配列だけが必要です。これは可能ですか?または多分それを行う別の方法がありますか?

4

2 に答える 2

0

パスにはポイントに関する情報のみが含まれているため、レンダリングのバリエーションを追跡する場合は、オブジェクトの個別のリストが必要です。

これは、 (ポイントをキャプチャしてセグメントの描画を簡素化するために)、セグメントに使用する、色と線のサイズに関する情報NSArray*などのフィールドを含む独自のカスタムオブジェクトを作成することで実現しました。NSBezierPath*CGPathDrawingMode

次に、描画するときに、配列の要素を繰り返し処理し、コンテキストの現在の色を設定し、そのセグメントの構成方法に応じて、現在の要素のいずれかstrokeまたはを呼び出します。fillNSBezierPath*

もっと速い方法があるかどうかも知りたいのですが、このアプローチは確かにうまくいきます。

于 2012-08-06T23:53:42.043 に答える
0

ビューの対応するレイヤーを画像としてレンダリングして、次の反復で更新できます。確かに、この場合はUIImageViewyourViewToSaveAsImageとして使用する方が適切です。この場合、このプロセスをさらに簡単にすることができます...

UIView *view = yourViewToSaveAsImage;

UIGraphicsBeginImageContext(view.bounds.size);
[view.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *result = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
于 2012-08-07T00:03:14.863 に答える