[英]Custom NSView draws over controls on top of it
我有一个带有自定义子类的NSView
,该子类在其中绘制了一个圆角矩形网格。 这个NSView
与界面生成器一起放置,在它上面我有一些NSButton
。
问题在于,有时当重新绘制视图时(即,当我单击视图顶部的按钮时),它会重新绘制要保留在顶部的一些按钮。 发生这种情况时,按钮上只会出现较小的圆角矩形,而不是在循环之前绘制的背景。
这是代码形式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];
}
}
这是屏幕截图:
更新:简化了代码,添加了屏幕截图。
Mac存在同级视图重叠的问题。 它以前没用过。...10.6仍然不经常用。
使用适当的超级视图/子视图层次结构
好的,我只是设法通过删除setClip
并找到另一种绘制内部笔触的方法来解决此问题。
我确信有可能在仍使用setClip
的情况下解决此问题,但是这次对我来说效果很好。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.