2016-03-23 19 views
3

Bir NSPopover kullanıyorum ve bir NSSSController'ı NSStatusItem'den özel bir görünüm olarak görüntülenecek şekilde yerleştiriyorum. Görünüm denetleyicisinin çoğu, üzerlerinde köşe yarıçapı olan NSButton dışında doğru görüntülenir. Yuvarlatılmış köşelerin uygulandığı bazı ekstra beyaz sızıntı var. Gerçek uygulama içindeki düğmeleri görüntülemek, bu sorun oluşmaz.NSButton köşe radyüsü ve NSPopover

"NSAppearanceNameAqua" için ayarladığım NSPopover görünümü ile bir şeyler yapmak zorunda hissediyorum.

NSButtons, bir NSTableView'da görüntülenen ve bu stile ayarlanmış bir NSView içindedir. Gerçek uygulama açıkken

self.createdButton.wantsLayer = true 
    self.createdButton.layer?.backgroundColor = Utils.blackColor().CGColor 
    self.createdButton.layer?.masksToBounds = true 
    self.createdButton.layer?.cornerRadius = 5 

enter image description here enter image description here

üst görüntü

olduğunu. Alttaki görüntü, denetleyicinin bir NSPopover içinde gösteriliyor olmasıdır.

+0

siz "görünümü denetleyicisi bir NSPopover içinde gösteriliyor" vs "fiili uygulama açıktır üst görüntü olduğunda" demeniz ne anlama geliyor? Yani uygulama alttaki resimde açık değil mi? – rocky

+0

Üst menü çubuğunda görünen bir NSStatusItem oluşturuyorum. Menü çubuğundaki simgeyi tıklattığınızda, bu düğmeleri içeren denetleyiciyle birlikte bir NSPopover görünür. – cmakthat

+0

Bulduğum bir şey, düğmelerinizi programlı olarak contentViewController uygulamasına eklerseniz ve daha sonra bunları yuvarlatırsanız, bunlar doğru bir şekilde döndürülür. Bununla birlikte, bir Xib/Storyboard'daki Interface Builder'dan aynı düğmelerin/görünümlerin bağlanması doğru yuvarlamayı uygulamaz, en azından benim deneyimlediğim buydu. Belki AppKit'te bir böcek? – zic10

cevap

0

bezier yolu kullanarak köşe yarıçapını oluşturmak yani

NSBezierPath *path = [NSBezierPath bezierPathWithRoundedRect:view.bounds xRadius:3 yRadius:3]; 
    CAShapeLayer *maskLayer = [CAShapeLayer layer]; 
    maskLayer.frame = view.bounds; 
    maskLayer.path = path.toCGPath; 
    self.containerView.layer.mask = maskLayer; 
İlgili konular