总的来说,我是 Swift 和 Stack Overflow 的新手,所以我希望我不会要求太多。
我正在尝试实现可以在 Finder 或 XCode 编辑器工具栏中找到的“分组”按钮样式,例如这两个按钮组。在第一组按钮中可以看到,左键只在左侧圆角,中间键完全不圆角,右键只在右侧圆角。同样的事情也适用于第二组按钮。我想完成这样的事情,但我不确定如何实现这一目标。
在线搜索解决方案(包括 iOS 教程)后,我尝试为 NSButton 类提供扩展并手动将左两个角圆角,如下所示:
// Extensions.swift
extension NSButton {
func roundLeftCorners() {
self.layer?.maskedCorners = [.layerMinXMinYCorner, .layerMinXMaxYCorner]
self.layer?.cornerRadius = 20.0 // Some arbitrary number, just wanted to make the rounded corner visible
self.layer?.masksToBounds = true
}
}
然后,在我的视图控制器的viewDidLoad()
功能上,我尝试调用这个成员:
// MyViewController.swift
class MyViewController: NSViewController {
@IBOutlet weak var leftButton: NSButton!
override func viewDidLoad() {
super.viewDidLoad()
leftButton.roundLeftCorners()
}
// ...
}
...但这对我不起作用。一些简单的调试表明是的Optional
值self.layer
,nil
所以我不确定那里发生了什么。
接下来,我尝试创建自己的自定义类并draw(_ dirtyRect:)
使用上面相同的代码覆盖该函数,如下所示:
// LeftButton.swift
class LeftButton: NSButton {
override func draw(_ dirtyRect: NSRect) {
super.draw(dirtyRect)
self.layer?.maskedCorners = [.layerMinXMinYCorner, .layerMinXMaxYCorner]
self.layer?.cornerRadius = 20.0
self.layer?.masksToBounds = true
}
}
// MyViewController.swift
class MyViewController: NSViewController {
@IBOulet weak var leftButton: LeftButton!
// ...
}
...但这并没有删除右侧的圆角。奇怪的是,新cornerRadius
值只有在数字大约50.0
或更大时才明显;少一点,左角看起来和其他的一模一样NSButton
。
一些答案提到手动绘制路径中的点NSBezierPath
,但它没有达到我想要的。我在情节提要编辑器上也找不到任何相关的属性/属性。也许我对这个看似简单的问题的处理方法过于复杂了,或者我没有以正确的方式看待它,但我希望有人能帮助我解决这个问题。提前致谢!