2016-03-03 87 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,但非常相似!