2014-10-19 26 views
16

Qual è il modo corretto di utilizzare the Dark Vibrant (NSAppearanceNameVibrantDark) o (NSAppearanceNameVibrantLight) Modalità di luce vibrante con una NSWindow?Come usi la vibrazione oscura su una NSWindow?

Sto costruendo un'applicazione e vorrei offrire il nuovo aspetto Vibrant Dark come opzione per l'applicazione principale NSWindow. La finestra stessa è una finestra piuttosto diritta con un NSToolbar nella parte superiore e una vista di scorrimento come area del contenuto principale.

Ci sono molte informazioni da Apple sull'uso delle nuove apparizioni di vivacità in congiunzione con un NSVisualEffectsView, ma sto cercando chiarimenti su come utilizzare tali aspetti su un NSWindow.

Nel file di intestazione NSAppearance.h, c'è un commento che afferma che le apparizioni vibranti dovrebbero essere impostate solo su un NSVisualEffectsView. Non si fa menzione del fatto che sia supportato su NSWindow.

video WWDC parlano di fare in modo che si sta utilizzando viste strato-backed e che si sta permettendo vivacità sulle subviews quando si utilizzano le nuove apparenze vivaci, ma ancora una volta, non si parla di loro utilizzo su un NSWindow.

Il codice di esempio VisualEffectsPlayground ha un esempio di un'applicazione simile a FaceTime che utilizza la modalità oscura, ma non ha una barra degli strumenti e utilizza la maschera del contenuto completo.

Da queste informazioni, sto facendo la seguente nel mio metodo NSWindowController's windowDidLoad:

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

E, abbastanza sicuro, ho ottenere un nero NSToolbar con una barra del titolo della finestra nera. Così sembra come sta funzionando correttamente, ma quando il mio ScrollView scorre il contenuto (le miniature delle immagini), la traslucenza di serie sotto la NSToolbar e la barra del titolo della finestra non è presente o è a caso presente. Non sembra esserci alcun modello. A volte quando scorro la vista a scorrimento, il contenuto viene mostrato nello stato "sfocato" sotto la barra degli strumenti e la barra del titolo. Altre volte quando faccio scorrere, la barra degli strumenti e la barra del titolo sono solo di un nero opaco. (La barra del titolo e la barra degli strumenti disegnano ancora i loro titoli e pulsanti.)

Quando non richiedo un livello per la vista del contenuto della finestra, ottengo più una barra del titolo grigia e un titolo della finestra piuttosto che un nero "puro" . (Colore di sfondo del mio ScrollView può essere bianco, grigio scuro o nero.)

Qualsiasi aiuto o chiarimenti su come configurare correttamente un NSWindow (che contiene un NSToolbar e un NSScollView) per utilizzare le nuove apparizioni vivacità sarebbe molto apprezzato .

+0

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

risposta

6

Questo farà una finestra della modalità scura. Successivamente, tutto nella finestra (compresa la barra del titolo, la barra degli strumenti e persino i fogli di dialogo) diventerà scuro.

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

invalidateShadow non sembra necessario, ma a volte l'ombra non funziona correttamente se mancava. (OS X 10,10)

+0

Grazie, ma speravo di ottenere maggiori informazioni sul fatto che l'intera finestra ('contentView') debba essere supportata da layer o no e dove, se necessario, deve essere inserito NSVisualEffectView. Solo impostando la proprietà 'appearance' della finestra mi è chiaro, ciò che non è del tutto chiaro è il modo in cui questo influisce sull'efficacia di ogni altro controllo nella finestra. – kennyc

3

ho pensato che si può creare una sottoclasse NSWindowController. Impostare la classe per il controller della finestra in IB sul numero di telefono personalizzato NSWindowController.Dopo che nella funzione windowDidLoad

self.window?.titlebarAppearsTransparent = true 

impostare anche "Full Size contenuti" nella finestra di ispezione attributo per il NSWindow.

enter image description here