1

NSViewに描画しているアプリケーションを作成しています。ここでは、データモデルに場所を保存してから、ビューのメソッドmouseDown内でその場所にグラフィックを描画しています。drawRectそれはすべてうまくいきます。

私の終わりに、私は再描画を強制するmouseDownように呼びかけていました。[self setNeedsDisplay:YES];唯一のことは、dirtyRectが常にビューのフルサイズであるということです。変更された数ピクセルだけでウィンドウ全体を再描画しないように、これを可能な限り最適化したかったのです。

代わりに、代わりに呼び出し[self drawRect:...]て長方形を指定しています。

今、私drawRectはすべてのグラフィックを比較して、それがdirtyRectに該当するかどうかを確認する必要があります。ドローイングの仕事を、すべてをチェックする境界の仕事と交換したようです。多かれ少なかれ効率的にしたかどうかはわかりません。

では、標準的な方法は何ですか?ビュー内のすべてを再描画し、dirtyRectを無視するのが一般的ですか? オブジェクトがにあるかどうかを確認するためのテストとして使用できる優れた関数はありますdirtyRectか?

4

1 に答える 1

4

-drawRect:画面に描画しようとしている場合は、決して自分自身を呼び出すべきではありません。AppKit に呼び出してもらいます。あなたがすべきことは-setNeedsDisplayInRect:、あなたの-mouseDown:.

次に、 に-drawRect:含まれるものだけを描画しdirtyRectます。を使用して、ポイントがdirtyRect内にあるかどうかをテストできますNSPointInRect()。NSRect を操作するための便利な機能は他にもたくさんあります。ポイント関数四角形関数のドキュメントを参照してください。

于 2013-03-01T21:40:47.737 に答える