在我的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)
}
出现的问题如下图所示:
图像显示其中一个视角。角落的圆角只是部分成功,因为仍然有一个白色的角落伸出窗户的圆角。
如果有人有更好的设置窗口角半径的方法,我会接受这样的建议。我已就此事做了大量研究,但这个解决方案似乎是最简单的。
非常感谢任何有关如何解决此问题的建议。
答案 0 :(得分:2)
您应该在NSWindow实例上执行以下操作:
[window setOpaque:NO];
[window setBackgroundColor:[NSColor clearColor]];
并绘制所需的形状。
然后检查this article。
答案 1 :(得分:2)
我通过使用Sublayer找到了解决方案。
class StyledButton: NSView {
let roundLayer: CALayer = CALayer()
required init(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)!
setup()
}
override init(frame: CGRect) {
super.init(frame: frame)
setup()
}
func setup() {
self.wantsLayer = true
self.layer?.addSublayer(roundLayer)
roundLayer.frame = self.bounds
roundLayer.cornerRadius = 3
roundLayer.backgroundColor = NSColor.redColor().CGColor
}
}