0

Window に通常の DocumentView クラスがあります。ユーザーがボタンを押すと、次のコードがあります。

- (void)handleButtonPress:(NSNotification *)note{
  // draw new graph view
  EDGraphView *graph = [[EDGraphView alloc] init];
  [self addSubview:graph];
  [self setNeedsDisplay:TRUE];

  NSLog(@"Button was pressed");
}

ボタンをクリックするたびに「ボタンが押されました」という出力が得られるため、これは正しく呼び出されます。それに加えて、ビューの下のdrawRectメソッドも呼び出されます。

- (void)drawRect:(NSRect)dirtyRect
{
  NSRect bounds = [self bounds];
  [[NSColor whiteColor] set];
  [NSBezierPath fillRect:bounds];

  for(EDGraphView *graph in [self subviews]){
    [graph setNeedsDisplay:TRUE];
    NSLog("calling set needs display on graph object!");
  }
}

ただし、EDGraphView クラスに移動してdrawRectメソッドを編集すると、次のようになります。

- (void)drawRect:(NSRect)dirtyRect
{
  NSLog(@"redrawing graph view.");
}

呼び出されることはありません!setNeedsDisplayおよびdrawRectプロセス全体について何かが欠けているに違いありません。

助言がありますか?

4

2 に答える 2

0

こんにちは通常、setneeddisplayをdrawrectに呼び出すことはありません。

(スーパーで)試しましたか?:

- (void)drawRect:(NSRect)dirtyRect
{
    NSRect bounds = [self bounds];
   [[NSColor whiteColor] set];
   [NSBezierPath fillRect:bounds];
   [super drawRect:rect];

}
于 2012-07-22T20:25:53.667 に答える
0

わかりました...サブビューで次の init 呼び出しを行う必要がありました。

EDGraphView *graph = [[EDGraphView alloc] initWithFrame:bounds];

drawRect メソッドを呼び出すようになりました。

于 2012-07-22T22:04:09.017 に答える