我有NSView
一个自定义子类,它在其中绘制一个圆角矩形网格。这NSView
是与界面生成器一起放置的,在它上面我有一些NSButton
s。
问题是,有时当视图被重新绘制时(即,当我单击它上面的按钮时),它会重新绘制一些本应留在顶部的按钮。当这种情况发生时,只有较小的圆角矩形出现在按钮上,而不是在循环之前绘制的背景。
这是drawRect的代码形式:
[NSGraphicsContext saveGraphicsState];
NSBezierPath *path = [NSBezierPath bezierPathWithRect:self.bounds];
[[NSColor grayColor] set];
[path fill];
[NSGraphicsContext restoreGraphicsState];
for( int r = 0; r < 15; r++ ){
for( int c = 0; c < 15; c++ ) {
[NSGraphicsContext saveGraphicsState];
// Draw shape
NSRect rect = NSMakeRect(20 * c, 20 * r, 15, 15);
NSBezierPath *roundedRect = [NSBezierPath bezierPathWithRoundedRect: rect xRadius:1 yRadius:1];
[roundedRect setClip];
// Fill
[[NSColor colorWithCalibratedHue:0 saturation:0 brightness:0.3 alpha:1] set];
[roundedRect fill];
// Stroke
[[NSColor colorWithCalibratedHue:0 saturation:0 brightness:0.5 alpha:1] set];
[roundedRect setLineWidth:2.0];
[roundedRect stroke];
[NSGraphicsContext restoreGraphicsState];
}
}
这是一个屏幕截图:
更新:简化代码,添加截图。