Cocoa では、ビューを再描画したい場合、setNeedsDisplay:
YES のパラメーターを使用してビュー自体を再描画するようにビューに指示するメッセージをビューに送信します。setNeedsDisplay:NO
マルチスレッド環境など、ビューを送信したい状況があり、ビューを送信した場合setNeedsDisplay:YES
、 with の直後にもう一度設定するとsetNeedsDisplay:NO
、ビュー自体が再描画されるのではないかと考えていました。を呼び出す理由がない場合setNeedsDisplay:NO
、代わりに次のようなものを実装できるような退屈なメソッドを作成する理由[view redrawView]
2 に答える
ご存じのとおり、通常のイベント ループを通過するたびに、(必要に応じて) 表示の更新が自動的に行われます。setNeedsDisplay:
必要に応じて、その間にディスプレイの更新を強制するために呼び出します。
のドキュメントからNSView
:
考察
ビュー オブジェクトの描画に使用されるデータまたは状態が変化するたびに、ビューに setNeedsDisplay: メッセージを送信する必要があります。表示が必要としてマークされた NSView オブジェクトは、アプリケーションのイベント ループを通過するたびに自動的に再表示されます。(イベント ループが発生する前に再表示する必要があるビュー オブジェクトは、もちろんすぐに適切な display... メソッドに送信できます。)
この関数のブール値パラメーターは、問題のビューの境界全体が影響を受けるかどうかを指定するだけであり、一部のプロパティ「needsDisplay」が true または false に設定されているかどうかではありません。したがって、setNeedsDisplay:
実際には「redrawView」とほぼ同じように機能しますが、追加のパラメーターのみが必要です。
編集
上記は、同じドキュメントから着想を得たものです。
flag
YES の場合、レシーバの境界全体を表示が必要としてマークします。NO の場合、表示不要としてマークします。