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



如果我从视图中删除这个方法,一切都可以正常工作(如果我单击一个按钮,没有内容消失),所以这绝对是原因。

我试图使一个窗口是圆润的,并通过下面的代码有一个梯度。有什么问题,这可能导致内容在视图上消失吗?

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

}

切换到NSGradient drawwinbezierpath可以修复这个问题。

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

当你使用setClip时,你是删除以前的剪辑路径和用你的新路径替换。这意味着您将在的脏区域之外绘制,从而覆盖先前绘制的内容。

我在自己的启动画面上画圆角时也遇到了同样的问题,最终我找到了一种不同的方法来实现我想要的。

同样,您可以使用NSBezierPathclipRect:类方法将剪辑路径更改为现有路径与您想要限制绘制的区域的交集。当然,保存并恢复您调用clipRect:时的图形状态。

相关内容

  • 没有找到相关文章

最新更新