2014-10-19 4 views
16

Was ist der richtige Weg, um die Modi Vibrant Dark (NSAppearanceNameVibrantDark) oder Vibrant Light (NSAppearanceNameVibrantLight) mit einer NSWindow zu verwenden?Wie benutzt du die dunkle Schwingung auf einem NSWindow?

Ich baue eine Anwendung und möchte das neue Vibrant Dark-Erscheinungsbild als Option für die Hauptanwendung NSWindow anbieten. Das Fenster selbst ist ein ziemlich einfaches Fenster mit einem NSToolbar über die Oberseite und einer Bildlaufansicht als Hauptinhaltsbereich.

Es gibt viele Informationen von Apple über die Verwendung der neuen Vibrationsauftritte in Verbindung mit einer NSVisualEffectsView, aber ich bin auf der Suche nach einer Erklärung, wie man diese Erscheinungen auf einer NSWindow verwendet.

In der Header-Datei gibt es einen Kommentar, der besagt, dass die dynamischen Erscheinungen nur auf NSVisualEffectsView festgelegt werden sollten. Es wird nicht erwähnt, dass es auf NSWindow unterstützt wird. Die WWDC-Videos sprechen darüber, dass Sie Layer-Backed Views verwenden und dass Sie die Lebendigkeit Ihrer Subviews zulassen, wenn Sie die neuen dynamischen Erscheinungsbilder verwenden, aber auch hier wird nicht erwähnt, dass sie auf einem NSWindow verwendet werden. Der VisualEffectsPlayground-Beispielcode enthält ein Beispiel für eine Facetime-ähnliche Anwendung, die den Modus "Dunkle Lebendigkeit" verwendet, aber keine Symbolleiste aufweist und die Maske mit vollem Inhalt verwendet.

Aus dieser Information, mache ich folgend in meiner NSWindowController's windowDidLoad Methode:

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

Und sicher genug, ich bar eine schwarzes NSToolbar mit einem schwarzen Fenstertitel. So sieht es aussieht wie es richtig funktioniert, aber wenn meine scrollview scrollt seinen Inhalt (Thumbnails von Bildern) die Standard-Transluzenz unter der NSToolbar und die Titelleiste des Fensters ist entweder nicht vorhanden oder ist zufällig vorhanden. Es scheint kein Muster zu geben. Manchmal, wenn ich den Scrollview scrolle, wird der Inhalt im "unscharfen" Zustand unter der Symbolleiste und der Titelleiste angezeigt. Andere Zeiten, wenn ich scrolle, sind die Symbolleiste und Titelleiste nur ein opakes Schwarz. (Die Titelleiste und die Symbolleiste zeichnen immer noch ihre Titel und Schaltflächen.)

Wenn ich keine Ebene für die Inhaltsansicht des Fensters anfordere, dann bekomme ich mehr eine graue Titelleiste und einen Fenstertitel als eine "reine" schwarze . (My Scrollhintergrundfarbe kann entweder weiß, dunkelgrau oder schwarz sein.)

Jede Hilfe oder Klärung, wie man richtig einen NSWindow konfigurieren (enthält eine NSToolbar und eine NSScollView) die neuen Lebhaftigkeit Erscheinungen zu verwenden wäre sehr geschätzt .

+0

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

Antwort

6

Dies wird ein dunkles Modusfenster machen. Anschließend wird alles im Fenster (einschließlich Titelleiste, Symbolleiste und sogar Dialogblätter) dunkel werden.

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

invalidateShadow nicht erforderlich zu sein scheinen, aber manchmal funktioniert Schatten nicht richtig, wenn fehlte. (OS X 10.10)

+0

Vielen Dank, aber ich hatte gehofft, zu mehr Verständnis darüber, ob das gesamte Fenster ('contentView') Layer-Backed sein muss oder nicht und wo, wenn überhaupt, ein NSVisualEffectView eingefügt werden muss. Es ist mir klar, dass ich nur die 'Aussehen'-Eigenschaft des Fensters einstellen muss. Was nicht ganz klar ist, ist, wie sich dies auf das' effectiveAppearance' von jedem anderen Steuerelement im Fenster auswirkt. – kennyc

3

Ich dachte, dass Sie NSWindowController Unterklasse können. Stellen Sie die Klasse für Ihren Window Controller in IB auf Ihre benutzerdefinierte NSWindowController.Danach in der windowDidLoad Funktion

self.window?.titlebarAppearsTransparent = true 

Auch auf "Full Size Seiten" im Attribut-Inspektoren für die NSWindow.

enter image description here