无边框圆角NSWindow

4
我正在创建一个自定义的NSWindow,没有标题栏,并使用NSBorderlessWindowMask使其完全无边框。然而,我遇到的问题是窗口有锐利的边缘,而且没有调整大小的控制。如何给无边框窗口添加圆角?

这不是此问题的重复,因为那个问题更多地涉及去除标题栏,目前没有答案。


你可能正在寻找类似于这个的东西。这是一个有边框的样式,但看起来接近你想要的。 - eonil
3个回答

8
你可以使窗口完全透明,并自己处理所有的绘制。我有一个OpenGL视图的示例,但它也适用于Quartz视图或Cocoa视图。
在创建使用NSBorderlessWindowMask常量创建新窗口的NSWindow子类的初始化程序中添加以下内容。
[self setOpaque:NO];
[self setBackgroundColor:[NSColor clearColor]]; 

你可能需要自己绘制调整大小控件。我从中提取的示例是全屏窗口,因此不需要调整大小。
祝好运。

我应该在哪里处理绘制所有内容? - Joshua
在你的视图类中重写-drawRect:方法。你需要一个绘图上下文来进行绘制,所以要么子类化NSImage,要么子类化NSOpenGLView。我说错了,在我的答案中给你的代码应该在你的NSWindow子类中。你还需要一个自定义的视图子类来进行绘制。 - Mark
1
根据您提供的信息,我找到了这个关于Cocoa With Love的教程。非常感谢您的回答!http://cocoawithlove.com/2008/12/drawing-custom-window-on-mac-os-x.html - Joshua
谢谢提供链接。我已经阅读《Cocoa With Love》多年,但不知道那个教程。 - Mark

0
最简单的获得带有圆角的窗口的方法是将一个NSBox放置到窗口中,因为这些框具有可定制的圆角和可定制的边框。如果您将窗口设置为非不透明并将背景颜色设置为透明(“clear color”),则可以获得带有圆角的NSWindow,它会绘制正常的窗口阴影(即使在旧系统上,否则此类窗口将没有阴影)。大部分工作都可以在Interface Builder中完成。详情请参见此处

0
只有带标题的窗口才会有圆角。所以你需要做的就是这样:
window.styleMask = [.titled]
window.titleVisibility = .hidden
window.titlebarAppearsTransparent = true

这应该是一个没有标题栏的圆角窗口的最小配置。


但是,你会受到底部边框的限制。这就是我发现的问题。当我关闭底部边框时,编译时出现错误。“常规边框样式的窗口不使用顶部内容边框属性的AutoSize(其他值在运行时明确不支持并将导致异常)”。 - Tap Forms

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接