Как вы используете темную вибрацию в NSWindow?

Каков правильный способ использования режимов Vibrant Dark (NSAppearanceNameVibrantDark) или Vibrant Light (NSAppearanceNameVibrantLight) с помощью NSWindow?

Я создаю приложение и предлагаю новый вид Vibrant Dark в качестве опции для основного приложения NSWindow. Окно представляет собой довольно прямое окно с NSToolbar сверху и свитком в качестве основной области содержимого.

Там много информации от Apple о том, как использовать новые проявления вибрации в сочетании с NSVisualEffectsView, но я ищу разъяснения о том, как использовать эти появления на NSWindow.

В заголовочном файле NSAppearance.h есть комментарий, в котором говорится, что яркие появления должны быть установлены только на NSVisualEffectsView. Там нет упоминания об его поддержке NSWindow.

В видеороликах WWDC говорится о том, что вы используете просмотры с поддержкой слоев и что вы позволяете играть на своих подзонах при использовании новых ярких выступлений, но опять же, не упоминая об использовании их на NSWindow.

В примере кода VisualEffectsPlayground есть пример приложения, подобного Facetime, которое использует режим темной вибрации, но у него нет панели инструментов, и она использует маску полного содержимого.

Из этой информации, я делаю следующее в моем методе NSWindowController windowDidLoad:

[self.window.contentView setWantsLayer:YES];
self.window.appearance = [NSAppearance appearanceNamed:NSAppearanceNameVibrantDark];

И, конечно же, я получаю черный NSToolbar с черной рамкой заголовка. Таким образом, похоже, что он работает правильно, но когда мой scrollview прокручивает его содержимое (миниатюры изображений), стандартная прозрачность под символом NSToolbar и панель заголовка окна либо не присутствует, либо случайно присутствует. Кажется, что нет какой-либо картины. Иногда, когда я просматриваю прокрутку, содержимое отображается в "размытом" состоянии под панелью инструментов и в строке заголовка. В других случаях, когда я прокручиваю, панель инструментов и заголовок являются просто непрозрачными черными. (Строка заголовка и панель инструментов по-прежнему рисуют названия и кнопки.)

Когда я не запрашиваю слой для представления содержимого окна, я получаю больше серого заголовка и заголовка окна, а не "чистого" черного. (Мой цвет фона прокрутки может быть белым, темно-серым или черным.)

Любая помощь или пояснение о том, как правильно настроить NSWindow (содержащую NSToolbar и NSScollView) для использования новых проявлений вибрации, будет высоко оценена.

Ответы

Ответ 1

Это сделает окно темного режима. Впоследствии все в окне (включая заголовок, панель инструментов и даже диалоговые листы) станет темным.

    let USE_DARK_MODE = true
    if USE_DARK_MODE {
        window.appearance = NSAppearance(named: NSAppearanceNameVibrantDark)
        window.invalidateShadow()
    }

invalidateShadow не требуется, но иногда тень не работает должным образом, если не хватает. (OS X 10.10)

Ответ 2

Я понял, что вы можете подклассом NSWindowController. Задайте класс для вашего Window Controller в IB своим пользовательским NSWindowController. После этого в функции windowDidLoad

self.window?.titlebarAppearsTransparent = true

Также установите "Просмотр содержимого полного размера" в инспекторе атрибутов для NSWindow.

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