2016-03-23 9 views
3

Я использую NSPopover, и я помещаю NSViewController внутри, чтобы отображаться как пользовательский вид из NSStatusItem. Большинство контроллеров представлений отображаются правильно, за исключением NSButton с радиусом угла на них. Есть еще несколько белых утечек, где применяются закругленные углы. Отображая кнопки в реальном приложении, эта проблема не возникает.Угловой радиус NSButton и NSPopover

Я чувствую, что он должен что-то сделать с появлением NSPopover, которое я установил в «NSAppearanceNameAqua».

NSButtons находятся в NSView, которые отображаются в NSTableView и настроены на этот стиль.

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

Верхнее изображение, когда фактическое приложение открыто. Нижнее изображение - это когда контроллер просмотра отображается в NSPповерсе.

+0

Что вы имеете в виду, когда вы говорите «сверху изображение, когда фактическое приложение открыто» против «контроллер вида показывается в NSPopover»? Итак, приложение не открыто в нижнем изображении? – rocky

+0

Я создаю NSStatusItem, который появляется в верхней строке меню. Когда вы нажимаете значок в строке меню, появляется NSPopover с контроллером представления, содержащим эти кнопки. – cmakthat

+0

Одна вещь, которую я нашел, - это то, что вы добавляете свои кнопки программным образом в ContentViewController, а затем округляете их, они будут округлены правильно. Однако привязка одних и тех же кнопок/представлений от Interface Builder в Xib/Storyboard не будет применяться к правильному округлению, по крайней мере, это то, что я испытал. Может быть, ошибка в AppKit? – zic10

ответ

0

создать радиус угла, используя путь Безье т.е.

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;