Замена NSStatusBarButton NSView для отключения вибрации - PullRequest
2 голосов
/ 31 января 2020

В настоящее время я пытаюсь уменьшить вибрацию по умолчанию, которая добавляется к значкам NSStatusBarItems в ОС Ma c. Я понимаю, что это может быть достигнуто путем изменения атрибута allowVibrancy. Тем не менее, поскольку это доступно только для чтения в NSView, мне нужно расширить этот класс и переопределить метод allowVibrancy.

class NoneVibrancyView: NSView
{
    override var allowsVibrancy: Bool { return false }
}

В настоящее время мой значок все еще выглядит как активированный allowVibrancy. Мне интересно, правильно ли я заменяю свой NSView. Вот мой код:

let statusBar = NSStatusBar.system

statusBarItem = statusBar.statusItem(withLength: NSStatusItem.squareLength)

let noneVibrancyView = NoneVibrancyView(frame: statusBarItem.button!.frame)

statusBarItem.button?.addSubview(noneVibrancyView)

statusBarItem.button?.title = "?"

let statusBarMenu = NSMenu(title: "My Status Menu Bar")

statusBarItem.menu = statusBarMenu

1 Ответ

1 голос
/ 31 января 2020

Вибрации подпредставлений будут перекрываться вибрацией его родителя. Следовательно, необходимо установить вибрацию кнопки строки состояния, которая является родительской для вашего пользовательского представления (из-за addSubview()).

Поскольку кнопка элемента состояния генерируется автоматически, вам, возможно, придется используйте расширения для этого:

extension NSStatusBarButton { 
    override open var allowsVibrancy: Bool { return false } 
}
...