2014-10-19 2 views
16

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

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

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

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

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

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

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

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

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

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

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

+0

http://stackoverflow.com/questions/24414483/how-can-i-use-nsvisualeffectview-in-windows-title-bar/24439689#24439689 – geowar

ответ

6

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

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

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

+0

Спасибо, но я надеялся получите больше понимания относительно того, нужно ли поддерживать полное окно ('contentView') на том или ином уровне, и где, если вообще, необходимо вставить NSVisualEffectView. Просто настройка свойства 'appearance' для окна понятна мне, что не совсем ясно, так это то, как это влияет на« эффективный вид »любого другого элемента управления в окне. – kennyc

3

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

self.window?.titlebarAppearsTransparent = true 

Также установлено "Full Size Content View" в атрибуте инспектора для NSWindow.

enter image description here

Смежные вопросы