1

カスタムのウィンドウがあり、NSViewコントロールのある下部バーがあります。そのうちの1つはですNSColorWheel

簡単にするために、ウィンドウの高さは332ピクセルで、カスタムNSViewの高さは300ピクセル、下部のバーの高さは32ピクセルです。

下部のバーはawakeFromNib、アプリが次のコードを使用してウィンドウをロードするときに、私の一部として作成されます。

[[self window] setAutorecalculatesContentBorderThickness:YES forEdge:NSMinYEdge];
[[self window] setContentBorderThickness: 32.0 forEdge: NSMinYEdge];

カスタムNSViewクラスでは、長方形を色で塗りつぶします。NSView私のクラスで以下を使用してアプリをロードすると、すべてが正常に機能します。

- (void)drawRect:(NSRect)dirtyRect
{
    dirtyRect = [self bounds];

    NSColor * mNewColor = [NSColor blackColor];
    [mNewColor set];
    [NSBezierPath fillRect:dirtyRect];
}

ただし、その後、下部のバーのカラーホイールが変更されたときにカスタムの色を変更するメソッドを呼び出すとNSView、下部のバーが色で上書きされます。次のコードは、このメソッドを示しています(このコードはカスタムNSViewクラスにあります:

- (void)changeBackgroundColor:(NSNotification *)notification
{
    NSLog(@"Changed background color");

    NSRect mRect = [self bounds];
    NSColor * mNewColor = [theColorWell color];
    [mNewColor set];
    [NSBezierPath fillRect:mRect];
    [self setNeedsDisplay:YES];
}

ウィンドウのサイズを変更すると問題はすぐに修正されますが、明らかなバグのためにユーザーがウィンドウのサイズを変更する必要はありません。

私が理解していないのは、呼び出したときにboundsカスタムではなく親ウィンドウにマッピングされているように見えるのに、マウスを使用してウィンドウのサイズを変更すると(1ピクセルだけでも)境界が正しく調整される理由です。NSViewsetNeedsDisplay

再描画の一番下のバーをどうにかして説明する必要がありますか?

ありとあらゆる助けが大いに感謝されます。

4

1 に答える 1

2

drawRect:カスタムの方法ですべての描画を行う必要がありますNSView。Cocoaは、このメソッドを呼び出すと、グラフィックコンテキストを自動的に設定します。他のメソッドで描画操作を実行すると、正しく描画されない場合があります。

のコードでdrawRect:、指定した現在の背景色に色を設定し、これで長方形をNSColorWell塗りつぶすことができます。dirtyRect

[self setNeedsDisplay:YES];次に、他のメソッドで呼び出すだけでdrawRect:、ビューを再描画するために自動的に呼び出されます。

詳細については、こちらを参照してください: http: //developer.apple.com/mac/library/documentation/Cocoa/Conceptual/CocoaViewsGuide/SubclassingNSView/SubclassingNSView.html#//apple_ref/doc/uid/TP40002978-CH7-SW4(特に図面ビューコンテンツセクション)

于 2010-03-05T18:12:27.637 に答える