2014-10-19 31 views
16

Jaki jest prawidłowy sposób korzystania z trybów Vibrant Dark (NSAppearanceNameVibrantDark) lub Vibrant Light (NSAppearanceNameVibrantLight) za pomocą NSWindow?Jak korzystać z mrocznej wibracji na NSWindow?

Buduję aplikację i chcę zaoferować nowy wygląd Vibrant Dark jako opcję dla głównej aplikacji NSWindow. Okno samo w sobie jest dość prostym oknem z numerem NSToolbar u góry i widokiem przewijania jako głównym obszarem zawartości.

Istnieje wiele informacji od Apple na temat korzystania z nowych wyglądzie żywy w połączeniu z NSVisualEffectsView, ale szukam wyjaśnienia na temat korzystania z tych wyglądy na NSWindow.

W pliku nagłówkowym NSAppearance.h znajduje się komentarz informujący, że jaskrawe wyglądy powinny być ustawione tylko na NSVisualEffectsView. Nie ma żadnej wzmianki o tym, że jest obsługiwana pod adresem NSWindow.

Filmy z konferencji WWDC mówią o tym, aby upewnić się, że używasz widoków z warstwami i że pozwalasz na wibracje w subspekcjach, gdy używasz nowych, żywych wyrażeń, ale znowu, nie wspominasz o używaniu ich na NSWindow.

Przykładowy kod VisualEffectsPlayground ma przykład aplikacji podobnej do Facetime, która korzysta z trybu ciemnej wibracji, ale nie ma paska narzędzi i używa maski pełnej zawartości.

Od tej informacji, robię następujących w moim sposobie NSWindowController's windowDidLoad:

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

I rzeczywiście, mam czarną NSToolbar z czarnym pasku tytułowym okna. Tak więc wygląda on tak, jakby działał poprawnie, ale kiedy mój przewijany przewija treść (miniatury obrazów), to standardowa przezroczystość pod NSToolbar i pasek tytułu okna jest albo nieobecny, albo jest losowo obecny. Wygląda na to, że nie ma żadnego wzoru. Czasami po przewinięciu przewijania zawartość jest wyświetlana w stanie "rozmazanym" pod paskiem narzędzi i na pasku tytułu. Innym razem, gdy przewijam, pasek narzędzi i pasek tytułu są po prostu nieprzezroczyste czarne. (Pasek tytułu i pasek narzędzi wciąż rysują tytuły i przyciski.)

Gdy nie zażądam warstwy dla widoku zawartości okna, to otrzymam więcej szarego paska tytułu i tytułu okna zamiast "czystego" czarnego . (Mój Scrollview za kolor tła może być biały, ciemny szary lub czarny).

Każda pomoc lub wyjaśnienie, w jaki sposób poprawnie skonfigurować NSWindow (który zawiera NSToolbar oraz NSScollView) do korzystania z nowych występy żywotność byłaby znacznie ceniona .

+0

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

Odpowiedz

6

Spowoduje to otwarcie okna trybu ciemnego. Następnie wszystko w oknie (w tym tytułowym, pasku narzędzi, a nawet w oknach dialogowych) stanie się ciemne.

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

invalidateShadow nie wydaje się konieczne, ale czasami cień nie działa prawidłowo, jeśli brakowało. (OS X 10.10)

+0

Dziękuję, ale ja ufałem uzyskać więcej informacji na temat tego, czy całe okno ('contentView') musi być zabezpieczone warstwowo czy nie i gdzie, jeśli w ogóle, należy wstawić NSVisualEffectView. Samo ustawienie właściwości "wyglądu" okna jest dla mnie jasne, nie jest do końca jasne, w jaki sposób wpływa to na "effectiveAppearance" każdej innej kontroli w oknie. – kennyc

3

Pomyślałem, że możesz podklasę NSWindowController. Ustaw klasę kontrolera Windows w IB na swój niestandardowy NSWindowController.Następnie w funkcji windowDidLoad

self.window?.titlebarAppearsTransparent = true 

ustawić także „Full Size Treści” w Inspektorze atrybut dla NSWindow.

enter image description here