如果我从我的视图中删除此方法,一切正常(如果我点击一个按钮,内容就不会消失),所以这绝对是原因。
我正在尝试通过下面的代码创建一个圆形窗口并具有渐变。是否有任何错误可能导致视图上的内容消失?
- (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];
}
答案 0 :(得分:0)
切换到NSGradient drawInbezierPath解决了这个问题。
答案 1 :(得分:0)
我知道你回答了自己的问题,但我想我会分享为什么你的内容会因上述代码而消失。
当您使用setClip
时,您删除上一个剪切路径并用新路径替换。这意味着您将最终绘制脏区域的外部,从而覆盖以前绘制的内容。
我在自己的启动画面上绘制圆角时遇到了同样的问题,并最终找到了一种不同的方式来做我想做的事。
此外,您可以使用clipRect:
的{{1}}类方法将剪切路径更改为现有路径与要限制绘制的区域的交集。当然,保存并恢复调用NSBezierPath
附近的图形状态。