Как добавить кнопки при использовании NSVisualEffectView

Я создал окно, используя NSVisualEffectView, чтобы получить размытие и закругленные углы. Как здесь

Проблема в том, что я не вижу свою кнопку в окне, когда у меня есть код NSVisualEffectView. Если я удаляю код, кнопка отображается. Что происходит не так?

Код NSVisualEffectView в AppDelegate.swift:

func applicationDidFinishLaunching(_ aNotification: Notification) {
        // Insert code here to initialize your application
        guard let window = NSApplication.shared().windows.first else { return }
        let effect = NSVisualEffectView(frame: NSRect(x: 0, y: 0, width: 0, height: 0))
        effect.blendingMode = .behindWindow
        effect.state = .active
        effect.material = .dark
        effect.wantsLayer = true
        effect.layer?.cornerRadius = 15.0
        effect.layer?.masksToBounds = true
        window.isOpaque = false
        window.backgroundColor = .clear
        window.contentView = effect
        window.titlebarAppearsTransparent = true
        window.titleVisibility = .hidden
    }

Я добавил несколько кнопок в раскадровку. Когда я запускаю проект, я не вижу никаких кнопок.

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

Когда я удаляю все из кода applicationDidFinishLaunching(_ aNotification: Notification), то есть NSVisualEffectView, я вижу кнопки.

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

Кто-нибудь может сказать мне, что происходит?


person ssh    schedule 13.03.2017    source источник


Ответы (2)


Я думаю, что должен был исправить вас только в вашем предыдущем вопросе, но я этого не сделал. т.

Вы используете раскадровку, так почему вы создаете переменную NSVisualViewEffect в своем коде?

Найдите nsvisualeffectview на правой панели (панель утилит), где вы ищете кнопки и т. д. (библиотека объектов).

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

Перетащите его и измените размер в соответствии с вашим основным контроллером представления.

Чтобы добавить эффект и режим размытия, перейдите в «Инспектор атрибутов» на панели «Утилиты».

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

и установите window.backgroundColor = .clear и window.isOpaque = false

func applicationDidFinishLaunching(_ aNotification: Notification) {
        // Insert code here to initialize your application
        guard let window = NSApplication.shared.windows.first else { return }
        window.isOpaque = false
        window.backgroundColor = .clear
}

Теперь вы можете добавить свои кнопки, текстовые поля и запустить проект. Вы можете увидеть все добавленные вами элементы.

Я надеюсь, что это помогает!

person SkrewEverything    schedule 14.03.2017
comment
МОЙ БОГ! Спасибо. Искал без устали 8 часов! Ты спас меня. - person ssh; 14.03.2017
comment
@ssh Я рад это слышать. - person SkrewEverything; 14.03.2017
comment
@ssh Как я могу скруглить углы окна, используя этот метод? - person dbrownjave; 05.08.2018

window находится над представлением, в которое вы добавляете кнопки, поэтому кнопки находятся под размытым окном, и поэтому их невозможно увидеть. Почему бы не добавить visualEffectView в тот же вид, что и кнопки? Вам нужно будет вставить его под кнопками, чтобы сделать кнопки видимыми.

person creeperspeak    schedule 14.03.2017
comment
Как я могу это сделать? Я имею в виду, я применяю NSVisualEffectView к window и добавляю кнопки поверх window через раскадровку. Итак, как я могу вывести кнопку на передний план? У меня есть опыт работы с веб-дизайном, и обычно у меня есть z-index, чтобы разместить элемент позади или впереди. Но как это сделать в какао? Я новичок в какао. Как я могу вставить это представление ниже кнопки? - person ssh; 14.03.2017
comment
Вы действительно не должны вообще добавлять что-то в window, и я даже не знал, что это вообще возможно сделать в раскадровке. Вы действительно должны добавить visualEffectView и все кнопки в UIView, и стандартным местом для этого является свойство view UIViewController. Что касается установки z-индекса, все подпредставления в какао также имеют индекс. Таким образом, вы можете сказать self.view.insertSubview(button, at: 0), чтобы поместить что-то в самый низ стека подвидов. - person creeperspeak; 14.03.2017
comment
Я попытался применить эффект к NSViewController вместо window. Я все еще не вижу кнопок. Не могли бы вы показать, как это сделать? Я новичок в разработке для Mac и не могу пройти - person ssh; 14.03.2017
comment
Ответ SkrewEverything решил мою проблему. Спасибо за помощь. - person ssh; 14.03.2017