NSVisualEffectView с закругленными углами

Как отобразить NSVisualEffectView с закругленными углами в OS X?

Мой код для добавления моего NSVisualEffectView:

let visualEffectView = NSVisualEffectView(frame: NSMakeRect(0, 0, 300, 300))
visualEffectView.material = NSVisualEffectMaterial.Dark
visualEffectView.blendingMode = NSVisualEffectBlendingMode.BehindWindow
self.addSubview(visualEffectView)

person Geek20    schedule 17.08.2015    source источник


Ответы (2)


Вы можете включить представления на основе слоев для своего NSVisualEffectView, установив wantsLayer на true, а затем установив cornerRadius слоя поддержки:

    let visualEffectView = NSVisualEffectView(frame: NSMakeRect(0, 0, 300, 300))
    visualEffectView.material = NSVisualEffectMaterial.Dark
    visualEffectView.blendingMode = NSVisualEffectBlendingMode.BehindWindow
    visualEffectView.wantsLayer = true
    visualEffectView.layer?.cornerRadius = 15.0
    self.view.addSubview(visualEffectView)

Это приводит к эффекту с красивыми закругленными углами:

введите описание изображения здесь

person Thomas Zoechling    schedule 17.08.2015
comment
Спасибо, это работает! однако у меня есть проблема, потому что я хочу, чтобы мой visualEffectView (Dark) был выше другого visualEffectView0 (с материалом: Match Appearance), а угловой радиус не работает, знаете ли вы, как почини это? --› скриншот - person Geek20; 17.08.2015
comment
Пока не знаю, как это исправить, но вот проблема, может кто поможет ???? - person Maxim Krouk; 28.06.2020
comment
Это не сработало для меня - оно настаивало на рисовании «внешних» углов черным цветом. - person Confused Vorlon; 17.11.2020

NSVisualEffectView имеет свойство maskImage, которое можно использовать для обрезки вида до произвольной формы.

Из заголовка:

/* The mask image masks this view. It is best to set this to the
   smallest mask image possible and properly set the image.capInsets to
   inform the image on how to stretch the contents when it is used as a
   mask. Setting the maskImage on an NSVisualEffectView that is the
   window.contentView will correctly set the window's shadow.
 */
public var maskImage: NSImage?

Например, вы можете использовать NSImage со скругленными углами и установить его capInsets на радиус угла, а его resizingMode на .stretch.

person sam    schedule 01.07.2016