2012-06-24 14 views
7

Mi piacerebbe avere una finestra con uno sfondo sfocato semitrasparente, proprio come può fare il terminale. Guarda questo video, circa 30 sec in, per vedere quello che voglio dire: http://www.youtube.com/watch?v=zo8KPRY6-Mkcome ottenere una finestra con sfondo sfocato semitrasparente

Vedere un'immagine qui: http://osxdaily.com/wp-content/uploads/2011/04/mac-os-x-lion-terminal.jpg

Sono stato googling per un'ora, e non può ottenere nulla per lavorare. Credo di aver bisogno in qualche modo di creare un livello dell'anima core e di aggiungere un filtro in background, ma finora non ho avuto successo ... Vedo solo lo sfondo grigio della mia finestra. Ecco il codice che ho finora:

Codice:

// Get the content view -- everything but the titlebar. 
NSView *theView = [[self window] contentView]; 
[theView setAlphaValue:0.5]; 

// Create core animation layer, with filter 
CALayer *backgroundLayer = [CALayer layer]; 
[theView setWantsLayer:YES]; 
[theView setLayer:backgroundLayer]; 
CIFilter *blurFilter = [CIFilter filterWithName:@"CIGaussianBlur"]; 
[blurFilter setDefaults]; 
[theView layer].backgroundFilters = [NSArray arrayWithObject:blurFilter]; 
[[theView layer] setBackgroundFilters:[NSArray arrayWithObject:blurFilter]]; 

Eventuali suggerimenti o esempi da fare quello che sto cercando di fare? Grazie!

+0

Stai cercando qualcosa chiamato finestra HUD! Prova a cercare su google che ti aiuterà – doNotCheckMyBlog

+0

grazie, ma non sto ancora ottenendo molto. trovato diversi post promettenti sul forum, ma ha indicato esempi o post di blog che non esistono più. –

+0

Francamente, dubito che la sfocatura sia facilmente possibile senza le API private. Per esempio. http://stackoverflow.com/questions/5901135/blur-background-behind-maattachedwindow – Vervious

risposta

3

alcun bisogno di layer e filtri, NSWindow può farlo per sé

[mywindow setOpaque:NO]; 
[mywindow setBackgroundColor: [NSColor colorWithCalibratedHue:0.0 saturation:0.0 brightness:0.2 alpha:0.5]]; 

si prega di non utilizzare questo, come sarà alfa vostra barra del titolo anche (post qui nel caso in cui altri hanno bisogno)

[mywindow setOpaque:NO]; 
[mywindow setBackgroundColor: [NSColor blackColor]]; 
[mywindow setAlphaValue:0.5]; 

enter image description here

+0

Questo è strano, il primo metodo non funziona per me (farlo in init). Anche provato in awakeFromNib, dove altro dovrei fare questo (sono in una sottoclasse nswindow) – Wesley

+3

Nessun effetto sfocato qui, giusto? – Raffael

+0

no, l'unica cosa che puoi controllare è la trasparenza (colorata). –

3

Per suggerimento di l'utilizzo di trasparenza Jiulong Zhao.

Per un uso sfondo sfocato questo

La chiamata su un NSWindow:

[self enableBlurForWindow:self]; 

La funzione:

-(void)enableBlurForWindow:(NSWindow *)window 
{ 
    //!!!! Uses private API - copied from http://blog.steventroughtonsmith.com/2008/03/using-core-image-filters-onunder.html 

    CGSConnection thisConnection; 
    uint32_t compositingFilter; 
    int compositingType = 1; // Under the window 

    /* Make a new connection to CoreGraphics */ 
    CGSNewConnection(NULL, &thisConnection); 

    /* Create a CoreImage filter and set it up */ 
    CGSNewCIFilterByName(thisConnection, (CFStringRef)@"CIGaussianBlur", &compositingFilter); 
    NSDictionary *options = [NSDictionary dictionaryWithObject:[NSNumber numberWithFloat:2.0] forKey:@"inputRadius"]; 
    CGSSetCIFilterValuesFromDictionary(thisConnection, compositingFilter, (__bridge CFDictionaryRef)options); 

    /* Now apply the filter to the window */ 
    CGSAddWindowFilter(thisConnection, [window windowNumber], compositingFilter, compositingType); 
} 

NB: Si utilizza un'API privato

+0

Sì, buon modo! E sembra sicuro in App Store. –

+13

In che modo è sicuro per l'app store quando utilizza API private? – strange

+0

http://cocoasnippets.io/cocoa/ui/nswindow/coregraphics/2014/02/27/translucent-nswindow-with-blurred-background.html questo collegamento funziona ancora – Jesus

0

Per coloro leggendo questo nel 2017 e utilizzando Swift 4 e volendo cambiare la vostra BG Alpha è possibile aggiungere il seguente alla vostra abitudine di classe NSWindow:

self.backgroundColor = NSColor.black 
self.backgroundColor = NSColor.init(calibratedHue: 0, saturation: 0, brightness: 0, alpha: 0.2) 

P.S. Non ho ancora bisogno dell'effetto sfocato e, quando lo faccio, aggiornerò la risposta

Problemi correlati