是否可以制作一个圆形的 NSButton?

Is it possible to make a circular NSButton?

我正在尝试创建自定义形状 NSButton。特别是我正在尝试使用自定义图像制作一个圆形按钮。我在创建自定义 UIButton 时发现了 a tutorial 并尝试将其适应 NSButton。但是有一个很大的问题。 clipsToBounds 似乎只有 iOS(

这是我的代码:

import Cocoa

class ViewController: NSViewController {

    @IBOutlet weak var mainButton: NSButton!
    var size = 32

    override func viewDidLoad() {
        super.viewDidLoad()
        configureButton()
                // Do any additional setup after loading the view.
    }
    func configureButton()
    {
        mainButton.wantsLayer = true
        mainButton.layerContentsRedrawPolicy = NSViewLayerContentsRedrawPolicy.OnSetNeedsDisplay
        mainButton.layer?.cornerRadius = 0.5 * mainButton.bounds.size.width
        mainButton.layer?.borderColor = NSColor(red:0.0/255.0, green:122.0/255.0, blue:255.0/255.0, alpha:1).CGColor as CGColorRef
        mainButton.layer?.borderWidth = 2.0
    }

    override var representedObject: AnyObject? {
        didSet {
        // Update the view, if already loaded.
        }
    }


}

我做错了什么?我怎样才能制作一个圆形的 NSButton?你能就替换 clipsToBounds 提出什么建议吗?

因为这是我到目前为止能够得到的:

您正在根据按钮的宽度设置半径。从你的截图来看,开始时按钮不是正方形,所以圆角不能创建圆。

不要玩转角半径。圆没有角。要使按钮显示为圆形,请将按钮的 layer 遮罩为圆形。

NSButton是NSView的子类,所以NSView中的所有方法,比如drawRect(_:),在NSButton中也都有。

所以创建一个新的 Button.swift 来绘制自定义布局

import Cocoa

class Button: NSButton {

    override func drawRect(dirtyRect: NSRect) {
        super.drawRect(dirtyRect)

        // Drawing code here.
        let path = NSBezierPath(ovalIn: dirtyRect)
        NSColor.green.setFill()
        path.fill()
    }

}

很棒的教程Here。它是 iOS ,但非常相似!