2016-03-23 16 views
3

Ich verwende einen NSPopover und ich setze einen NSViewController hinein, der als benutzerdefinierte Ansicht von einem NSStatusItem angezeigt wird. Der größte Teil des Ansichtscontrollers wird korrekt angezeigt, mit Ausnahme des NSButtons, auf dem ein Eckenradius vorhanden ist. Dort, wo die abgerundeten Ecken angebracht werden, tritt etwas zusätzliches Weiß auf. Dieses Problem tritt nicht auf, wenn die Schaltflächen in der tatsächlichen Anwendung angezeigt werden.NSButton Eckenradius und NSPopover

Ich fühle, dass es etwas mit dem NSPopover Erscheinen tun muss, das ich auf "NSAppearanceNameAqua" eingestellt habe.

Die NSButtons befinden sich in einem NSView, der in einer NSTableView angezeigt wird und auf diesen Stil eingestellt ist.

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

Das obere Bild ist, wenn die tatsächliche Anwendung geöffnet ist. Das untere Bild wird angezeigt, wenn der Ansichts-Controller in einem NSP-Bildschirm angezeigt wird.

+0

Was meinen Sie, wenn Sie sagen „das obere Bild, wenn die tatsächliche Anwendung ist offen“ vs „die View-Controller innerhalb eines NSPopover gezeigt wird“? Also ist die App im unteren Bild nicht geöffnet? – rocky

+0

Ich erstelle ein NSStatusItem, das in der oberen Menüleiste erscheint. Wenn Sie auf das Symbol in der Menüleiste klicken, wird ein NSP-Bildschirm mit dem Ansichtscontroller angezeigt, der diese Schaltflächen enthält. – cmakthat

+0

Eine Sache, die ich fand, ist, wenn Sie Ihre Tasten programmatisch in der ContentViewController hinzufügen und dann runden sie sie richtig runden. Das Verknüpfen der gleichen Schaltflächen/Ansichten vom Interface Builder in einem Xib/Storyboard wird jedoch nicht die richtige Rundung anwenden, zumindest habe ich das erlebt. Vielleicht ein Fehler in AppKit? – zic10

Antwort

0

erstellen Eckenradius Bezier-Pfad heißt

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;