1

こんにちはスタックオーバーフローの人々、私はココアにかなり慣れていません。私はXCode 3.1を持っています

状況: ボタンにリンクされたアクションを持つ NSObject サブクラス (AppController) があります。NSView サブクラス (AppView) に接続されたカスタム ビューを持っているよりも、drawRect コマンドで四角形を描画します (すべて機能します)。長方形。今のところ、私はそれを - (void) drawRect ... with [self drawIt] で呼び出しました。それもうまくいきます。

今やりたいことは、ボタンがクリックされたときに drawIt を呼び出すことです。(AppController.m で、ボタンのクリックによって Action -(IBAction) ... が呼び出された場合)

私はあなたが私を助けてくれることを願っています

4

1 に答える 1

6

Cocoa Drawing Guideの概念資料を読む必要があります。-drawRect:システムが必要と判断した場合、システムはあなたのビューを要求します。その点で、ビューはいつでも描画するように求められます。したがって、これは「現状を描く」という観点で考える必要があります。

おそらく(この基本的な状況で)すべきことは、カスタムビューにブールプロパティ「drawIt」を与え、ボタンアクションでビューインスタンスでこれを切り替えることです。このようif (self.drawIt == YES)にして、長方形描画コードを呼び出すことができます。

が呼び出されたときにビューを「クリア」するために常に何かを行う必要があります-drawRect:(境界全体を白で塗りつぶすなど)。その後、条件が満たされた場合にのみ条件付きのものを描画します。

例:

- (void)drawRect:(NSRect)aRect
{
  // Clean up background (we ignore "aRect", drawing entire view at once)
  [[NSColor whiteColor] set];
  NSRectFill([self bounds]);

  // Do we want to draw our magic rect?
  if ([self drawMagicRect])
  {
    [[NSColor redColor] set];
    NSRectFill([self magicRect]);
  }
}
于 2010-01-18T17:25:25.617 に答える