Voglio replicare lo sfondo degli stack di dock in modalità griglia ed elenco. Lo sfondo è nero traslucido con un effetto di sfocatura:Applicare un filtro di background CIFilter quando la finestra dell'host è trasparente
Il problema è che [CALayer backgroundFilters] si applica solo al contenuto della finestra, i filtri non sono applicati ai contenuti in altre finestre. Ecco il mio codice:
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
//make window transparent
self.window.backgroundColor = [NSColor clearColor];
[self.window setOpaque:NO];
[self.window setHasShadow:NO];
[self.window setStyleMask:NSBorderlessWindowMask];
//make the content view layer hosting
CALayer *rootLayer = [CALayer layer];
[[self.window contentView] setLayer:rootLayer];
[[self.window contentView] setWantsLayer:YES];
//blur the background contents - NOT WORKING!
[rootLayer setBackgroundColor:CGColorCreateGenericGray(0.0, .716)];
CIFilter *blurFilter = [CIFilter filterWithName:@"CIGaussianBlur"];
[blurFilter setDefaults];
[rootLayer setBackgroundFilters:[NSArray arrayWithObject: blurFilter]];
}
Non riesco a pensare a come altro ottenere questo effetto. (Ho dato un'occhiata ai servizi di visualizzazione per vedere se ci sono funzioni utili ma non ne vedo nessuna.)
Qualche idea?
Fantastico, grazie mille! –
FWIW, questo sembra non funzionare più in Yosemite. :-(CGSNewCIFilterByName() restituisce kCGErrorNotImplemented. –