我有一個自定義的NSView
窗口,並有一個底部的控制桿,其中之一是NSColorWheel
。自定義NSView填充底部酒吧油漆
爲簡單起見,窗口高332px,自定義NSView高300px,底欄高32px。
底欄創建爲的一部分,我當應用程序使用下面的代碼加載窗口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];
}
調整窗口即刻解決該問題,但很明顯,我不希望用戶不得不調整窗口的明顯的bug !
我不明白的是爲什麼我bounds
似乎是映射到父窗口,而不是定製NSView
當我打電話setNeedsDisplay
,但結合的正確,當我使用鼠標(哪怕只是調整窗口的大小調整1像素)
D o我不知何故需要考慮重繪的底部欄?
任何和所有的幫助非常感謝。
完美 - 工作的魅力。我沒有意識到'drawRect'正被文檔中指定的'setNeedsDisplay'所調用;-)不知何故,我在腦海中認爲'drawRect'只是一種初始化方法。 – Hooligancat 2010-03-05 18:29:00