macos - 使用 NSBezierPath 的 NSView 上的圆角绘制得很糟糕

标签 macos swift nsview

在我的 ViewController 的主 NSView 中,我覆盖了 func drawRect(dirtyRect: NSRect) 方法以使用 NSBezierPath 在我的主视图上实现圆角。 在相同的方法中,我还指定了主视图的渐变背景。

override func drawRect(dirtyRect: NSRect) {

    let path: NSBezierPath = NSBezierPath(roundedRect: self.bounds, xRadius: 18.0, yRadius: 18.0)
    path.addClip()

   let gradient = NSGradient(startingColor: NSColor(hexColorCode: "#383838"), endingColor: NSColor(hexColorCode: "#222222"))
   gradient.drawInRect(self.frame, angle: 90)
}

出现的问题如下图所示:

图像显示了其中一个 View 角。圆角处理只取得了部分成功,因为仍然有一个白色的角伸出窗口的圆角。

如果有人有更好的方法来设置窗口的角半径,我会接受这样的建议。我对这个问题做了很多研究,但是这个解决方案似乎是最简单的。

非常感谢有关如何解决此问题的任何建议。

最佳答案

您应该在 NSWindow 实例上执行以下操作:

[window setOpaque:NO];
[window setBackgroundColor:[NSColor clearColor]];

并画出需要的形状。

并检查this article .

关于macos - 使用 NSBezierPath 的 NSView 上的圆角绘制得很糟糕,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30950099/

相关文章:

macos - OS X 自动布局可防止调整窗口大小

Cocoa应用程序菜单-如何重新创建?

swift - 如何快速添加自定义字幕语言选项

ios - Swift:如何从 UITextField 中的建议电话号码自动填充中删除 "+"和国家代码

cocoa - NSMenuItem 自定义 View 不响应 keyEquivalent

cocoa - NSView 是否有类似于 UIView 的 setNeedsLayout/layoutSubviews 方法?

c - 如何在Xcode中编译包含多个文件的C程序

macos - 如果我使用证书对其进行签名并在 Mac 商店之外分发,我的应用程序会停止工作吗?

ios - 更改整个应用程序中的字体大小

swift - NSAlert 中的多个 NSTextField - MacOS