0

我有NSView一个自定义子类,它在其中绘制一个圆角矩形网格。这NSView是与界面生成器一起放置的,在它上面我有一些NSButtons。

问题是,有时当视图被重新绘制时(即,当我单击它上面的按钮时),它会重新绘制一些本应留在顶部的按钮。当这种情况发生时,只有较小的圆角矩形出现在按钮上,而不是在循环之前绘制的背景。

这是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];

    }
}

这是一个屏幕截图: 截屏

更新:简化代码,添加截图。

4

2 回答 2

0

mac 存在重叠兄弟视图的问题。它以前没有用.... 10.6,它仍然不经常工作。

使用适当的超级视图/子视图层次结构

于 2013-09-29T20:24:42.887 回答
0

好的,我只是通过删除setClip并找到一种不同的方法来绘制内部笔划来解决这个问题。

我确信在仍然使用的同时可以解决这个问题,setClip但这次这个解决方案对我来说效果很好。

于 2013-09-29T21:03:50.410 回答