2012-06-24 9 views
7

Ich möchte ein Fenster mit einem halbtransparenten unscharfen Hintergrund bekommen, genau wie das Terminal es kann. Sehen Sie dieses Video, ca. 30 sec in, um zu sehen, was ich meine: http://www.youtube.com/watch?v=zo8KPRY6-MkWie bekomme ich ein Fenster mit semitransparenten verschwommenen Hintergrund

ein Bild Siehe hier: http://osxdaily.com/wp-content/uploads/2011/04/mac-os-x-lion-terminal.jpg

Ich habe für eine Stunde googeln und nichts zu arbeiten bekommen. Ich glaube, ich muss irgendwie eine Kernanimationsschicht schaffen und einen Hintergrundfilter hinzufügen, aber ich bin bis jetzt nicht erfolgreich gewesen ... Ich sehe gerade den grauen Hintergrund meines Fensters. Hier ist der Code, den ich habe so weit gekommen:

Code:

// 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]]; 

Irgendwelche Tipps oder Beispiele zu tun, was ich versuche zu tun? Danke!

+0

Sie suchen nach etwas namens HUD-Fenster! Versuchen Sie, auf Google zu suchen, es wird Ihnen helfen, – doNotCheckMyBlog

+0

danke, aber ich bekomme immer noch nicht viel. habe einige vielversprechende Forenbeiträge gefunden, aber auf Beispiele oder Blogposts hingewiesen, die nicht mehr existieren. –

+0

Ehrlich gesagt bezweifle ich, dass die Unschärfe ohne private APIs leicht möglich ist. Z.B. http://stackoverflow.com/questions/5901135/blur-background-behind-maattachedwindow – Vervious

Antwort

3

keine Notwendigkeit für Schichten und Filter, NSWindow es sich

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

bitte diese nicht verwenden, da es auch Ihre Titelleiste alpha wird (es hier posten für den Fall, andere brauchen)

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

enter image description here

+0

Das ist seltsam, die erste Methode funktioniert nicht für mich (es in der init tun). Auch in watchFromNib versucht, wo sollte ich das sonst tun (ich bin in einer nswindow Unterklasse) – Wesley

+3

Kein Unschärfe-Effekt hier, oder? – Raffael

+0

Nein, das einzige, was Sie kontrollieren können, ist die Transparenz (bunt). –

3

Für die Transparenz Gebrauch Jiulong Zhaos Vorschlag.

Für einen unscharfen Hintergrund verwenden diese

Der Anruf auf einer NSWindow:

[self enableBlurForWindow:self]; 

Die Funktion:

-(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: Es verwendet eine private API

+0

Ja, guter Weg! Und sieht wie App Store sicher aus. –

+13

Wie ist App Store sicher, wenn private APIs verwendet werden? – strange

+0

http://cocoasnippets.io/cocoa/ui/nswindow/coregraphics/2014/02/27/translucent-nswindow-with-blurred-background.html dieser Link funktioniert immer noch – Jesus

0

Für diejenigen, Lesen Sie dies im Jahr 2017 und mit Swift 4 und wollen Ihr BG Alpha ändern können Sie das folgende zu Ihrer benutzerdefinierten NSWindow Klasse hinzufügen:

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

P. S. Ich brauche den Unschärfe-Effekt noch nicht und wenn ich das tue, werde ich die Antwort aktualisieren

Verwandte Themen