2016-03-23 1 views
3

J'utilise un NSPopover et je mets un NSViewController à l'intérieur pour être affiché comme une vue personnalisée à partir d'un NSStatusItem. La plupart du contrôleur de vue s'affiche correctement à l'exception du NSButton qui a un rayon de coin sur eux. Il y a des fuites blanches supplémentaires à l'endroit où les coins arrondis sont appliqués. Afficher les boutons dans l'application réelle, ce problème ne se produit pas.NSButton coin rayon et NSPopover

Je pense qu'il doit faire quelque chose avec l'apparence de NSPopover que j'ai mis à "NSAppearanceNameAqua". Les NSButtons sont dans un NSView qui sont affichés dans un NSTableView et sont mis à ce style.

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

L'image du haut est lorsque l'application réelle est ouverte. L'image du bas est lorsque le contrôleur de vue est affiché dans un NSPopover.

+0

Que voulez-vous dire quand vous dites « l'image du haut est lorsque l'application réelle est ouverte » contre « le contrôleur de vue est affiché dans un NSPopover »? Donc, l'application n'est pas ouverte dans l'image du bas? – rocky

+0

Je crée un NSStatusItem qui apparaît dans la barre de menu supérieure. Lorsque vous cliquez sur l'icône dans la barre de menus, un NSPopover apparaît avec le contrôleur de vue contenant ces boutons. – cmakthat

+0

Une chose que j'ai trouvée est que si vous ajoutez vos boutons par programme dans le contentViewController, puis autour d'eux, ils arrondiront correctement. Cependant, lier les mêmes boutons/vues d'Interface Builder dans un Xib/Storyboard n'appliquera pas l'arrondi correct, du moins c'est ce que j'ai vécu. Peut-être un bug dans AppKit? – zic10

Répondre

0

créer un rayon d'angle en utilisant le chemin de Bézier à savoir

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;