繁体   English   中英

自定义NSView在其上方绘制控件

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM