我该如何在Swift 4中仅在Nsbutton的一侧的角落四处绕过



我是Swift和stack溢出的新手,所以我希望我不要忍受太多。

我正在尝试实现在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()
    }
    // ...
}

...但这对我不起作用。一些简单的调试表明self.layerOptional值是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的路径绘制了点,但这并不能实现我想要的。我也找不到故事板编辑器上的任何相关属性/属性。也许我已经对这个看似简单的问题的方法过度复杂化,或者也许我不是正确地看待它,但是我希望有人可以帮助我。预先感谢!

1)您显示的图像正在使用简单的nSegementedControl。没有什么需要定制的。

2)您尝试做的事情无论如何都无法使用;如果它可以机械起作用,最终将做的只是剪切左角上的绘制内容。它不会神奇地填充右侧的绘图,并创建适当的控制边框等。

AppKit控件不仅是填充诸如边框,背景等属性的加利福尼亚人。它们几乎都是通过经典绘制策略的核心图形完全绘制的:一种或另一种方法。视图具有图层的事实是由于倒层造成的。您最终可以使用现有控件的层来做一些事情。要正确自定义它们,您将覆盖NSView,Nscontrol,Nscell等的标准绘图例程。

相关内容

  • 没有找到相关文章

最新更新