2016-03-03 88 views
3

我想创建一个自定义形状NSButton。特别是我正在尝试使用自定义图像制作圆形按钮。我发现a tutorial创建自定义UIButton并试图将其适应NSButton。但是存在一个巨大的问题。 clipsToBounds似乎仅适用于iOS(是否可以制作圆形的NSButton?

这里是我的代码:??

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

因为在这里?是我能到目前为止获得:

enter image description here

+1

“clipsToBounds似乎只是iOS”但CALayer'masksToBounds'不是。区别仅仅是因为NSView不是自动分层支持的,而UIView是。 – matt

回答

5

不要随角落半径玩耍。一个圆圈没有角落。要使该按钮显示为一个圆圈,请将该按钮的layer圈起来。

+0

尽管你在OS X上,但其原理与此iOS答案没有什么不同:http://stackoverflow.com/a/16475824/341994毕竟,Core Graphics是Core Graphics,而CALayer是CALayer,不管哪个平台,你在。 – matt

+0

当然,掩蔽将打破聚焦环和可达性。 –

+0

@ClausJørgensen非常有趣的一点。我没有想过这个。 – matt

3

您设置半径为b按下按钮的宽度。从屏幕截图看,按钮在开始时不是方形,因此四角四舍五入不能创建圆。

1

NSButton是NSView的子类,因此NSView中的所有方法(如drawRect(_ :))也都可以在NSButton中使用。

因此,创建一个新的Button.swift你画你的自定义布局

import Cocoa 

class Button: NSButton { 

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

     // Drawing code here. 
     var path = NSBezierPath(ovalInRect: dirtyRect) 
     NSColor.greenColor().setFill() 
     path.fill() 
    } 

} 

enter image description here

伟大的教程Here。它是iOS,但非常相似!