我有一个窗口,它有一个自定义窗口,NSView
并且有一个带有控件的底栏,其中一个是NSColorWheel
.
为简单起见,Window 为 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];
}
调整窗口大小会立即纠正问题,但显然我不希望用户必须调整窗口大小来解决明显的错误!
我不明白为什么我在调用时bounds
似乎映射到父窗口而不是自定义窗口,但是当我使用鼠标调整窗口大小时边界正确调整(即使只有 1 个像素)。NSView
setNeedsDisplay
我是否需要以某种方式考虑重绘的底部栏?
非常感谢任何和所有帮助。