无边框窗口内容的问题消失了

时间:2013-03-20 14:20:51

标签: objective-c xcode cocoa nswindow nsbezierpath

如果我从我的视图中删除此方法,一切正常(如果我点击一个按钮,内容就不会消失),所以这绝对是原因。

我正在尝试通过下面的代码创建一个圆形窗口并具有渐变。是否有任何错误可能导致视图上的内容消失?

- (void)drawRect:(NSRect)dirtyRect
{
    [NSGraphicsContext saveGraphicsState];

    NSBezierPath *outerClip = [NSBezierPath bezierPathWithRoundedRect:[self bounds]
                                                              xRadius:3.0
                                                              yRadius:3.0];
    [outerClip setClip];

    NSGradient* aGradient = [[NSGradient alloc]
                             initWithStartingColor:[NSColor colorWithCalibratedWhite:1.0 alpha:1.0]
                             endingColor:[NSColor colorWithCalibratedWhite:0.65 alpha:1.0]];

    [aGradient drawInRect:[outerClip bounds] angle:270];

    [NSGraphicsContext restoreGraphicsState];

}

2 个答案:

答案 0 :(得分:0)

切换到NSGradient drawInbezierPath解决了这个问题。

答案 1 :(得分:0)

我知道你回答了自己的问题,但我想我会分享为什么你的内容会因上述代码而消失。

当您使用setClip时,您删除上一个剪切路径并用新路径替换。这意味着您将最终绘制脏区域的外部,从而覆盖以前绘制的内容。

我在自己的启动画面上绘制圆角时遇到了同样的问题,并最终找到了一种不同的方式来做我想做的事。

此外,您可以使用clipRect:的{​​{1}}类方法将剪切路径更改为现有路径与要限制绘制的区域的交集。当然,保存并恢复调用NSBezierPath附近的图形状态。