2013-10-23 11 views
21

więc jest to standardowy sposób na dodanie filtru do warstwy:Dodawanie CIFilter do CALayer pod Mavericks?

NSView *view = self.window.contentView; 
view.wantsLayer = YES; 
CATextLayer *textLayer = [CATextLayer layer]; 
textLayer.frame = CGRectMake(10.0, 10.0, 200.0, 100.0); 
textLayer.string = @"foo"; 
textLayer.foregroundColor = [[NSColor redColor] CGColor]; 

// Add filter 
CIFilter *filter = [CIFilter filterWithName:@"CIGaussianBlur" keysAndValues:@"inputRadius", @5.0, nil]; 
textLayer.filters = @[filter]; 

// Attach layer 
[view.layer addSublayer:textLayer]; 

jednak awarii mojej aplikacji na OS X Mavericks. Używany do pracy na 10.8.

2013-10-23 13:09:20.767 Serus[3608:303] *** Terminating app due to uncaught exception 'CAInvalidCIFilter', reason: 'CI filters are not supported by this layer tree: {CIGaussianBlur { 
    inputImage = "<null>"; 
    inputRadius = 10; 
}}.' 

filtry CI nie są obsługiwane przez tego drzewa warstwy

ktoś kiedykolwiek widział? Co mogę robić źle?

Odpowiedz

42

Zdobione, Apple postanowił to zmienić i wymaga nową flagę bez powodu

progressIndicator.layerUsesCoreImageFilters = YES; 
+0

dzięki! Miałem ten sam problem z setCompositingFilter: i to naprawia. – uliwitness

+2

To nie bez powodu, ponieważ domyślnie CALayery są obecnie wyłączone z procesu, aby system mógł lepiej dzielić zasoby. Z pewnością można by udokumentować lepiej - czy mogę zasugerować radar :)/cc @uliwitness –

+1

z dokumentacji dla tej metody ... Jeśli przypisujesz filtry obrazu Core do widoku za pomocą metod setBackgroundFilters :, setCompositingFilter: lub setContentFilters: nie trzeba jawnie wywoływać tej metody. Te metody automatycznie informują AppKit, że musi on renderować hierarchię warstw w procesie. – uchuugaka