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

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

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

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

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

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

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

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

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

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

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

Мы будем очень благодарны за любую помощь или разъяснения о том, как правильно настроить NSWindow (который содержит NSToolbar и NSScollView) для использования нового внешнего вида яркости.


person kennyc    schedule 19.10.2014    source источник
comment
stackoverflow.com/questions/24414483/   -  person geowar    schedule 20.02.2015


Ответы (2)


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

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

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

person eonil    schedule 11.01.2015
comment
Спасибо, но я надеялся получить больше понимания относительно того, должно ли все окно (contentView) поддерживаться слоем или нет, и где, если вообще, нужно вставить NSVisualEffectView. Для меня просто установка свойства appearance окна ясна, но не совсем ясно, как это влияет на effectiveAppearance любого другого элемента управления в окне. - person kennyc; 07.03.2015

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

self.window?.titlebarAppearsTransparent = true

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

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

person tuna    schedule 15.01.2016