0

私は、データのストリームを取り込んで表示するグラフ作成アプリケーションに取り組んでいます。UIView (Core Graphics) で多くの線分を描画すると、非常に遅いことがわかります。新しいデータがある画面の一部だけを描画することで、速度を上げようとしています。

現在、この関数を使用して画面を再描画しています (Xamarin/monotouch を使用)

        NSTimer.CreateRepeatingScheduledTimer (TimeSpan.FromSeconds (0.1), delegate {
            pane.SetNeedsDisplay ();
        });

ここで、ペインは私の UIView オブジェクトです。ペイン オブジェクトは、画面のどの部分を再描画する必要があるかを認識しています。再描画する画面の領域を指定する別の方法があると思います-それは正しい方法ですか? または他の解決策はありますか?

また、コードは一連のグリッドを描画します。これらは決して変わりません。背景に追加できるように、レイヤーなどに保存する方法はありますか?

別の方法としては、openGL を使用することもできますが、線の描画は見栄えが悪く、正しく表示するには多くの追加コードを実装する必要があります。

ありがとう!

4

2 に答える 2

2

グラフ データの場合、CoreGraphics を直接使用して、UIView サブクラスのdrawRect:メソッドで線をレンダリングする必要があります。メソッドが CGRect 引数と重複するデータのみを再描画することを確認してください。このメソッドsetNeedsDisplayは、UIView 全体を再描画が必要であるとマークするため、グラフ データが変更されたときにそれを使用する代わりに、UIView のメソッドを使用して、呼び出されるsetNeedsDisplayInRect:UIView の領域に新しいデータがあることを示す必要があります。drawRect:その部分を再描画します(正しく実装した場合)。

背景グリッドに関しては、グリッドを UIImage にレンダリングしてから、グラフを描画するビューの背後にその UIImage を表示できます。UIGraphicsBeginImageContext、、、およびCALayer renderInContext:のドキュメントを参照してください。UIGraphicsGetImageFromCurrentImageContextUIGraphicsEndImageContext

于 2013-06-20T21:09:45.937 に答える