0

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

我正在尝试通过下面的代码制作一个圆形并具有渐变的窗口。这有什么问题会导致视图上的内容消失吗?

- (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];

}

4

2 回答 2

0

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

于 2013-03-22T07:54:27.020 回答
0

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

使用时,setClip您将删除以前的剪切路径并将其替换为新路径。这意味着您将在脏区之外绘制,从而覆盖以前绘制的内容。

我在自己的初始屏幕上绘制圆角时遇到了同样的问题,最终找到了一种不同的方法来做我想做的事。

此外,您可以使用 的clipRect:类方法NSBezierPath将剪切路径更改为现有路径与您要限制绘图的区域的交点。当然,在调用clipRect:.

于 2014-01-26T02:38:36.247 回答