2013-10-23 14 views
21

quindi questo è il modo standard di aggiungere filtro su un livello:Aggiunta di CIFilter a CALayer sotto 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]; 

Tuttavia, si blocca la mia applicazione su OS X Mavericks. Usato per lavorare su 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; 
}}.' 

filtri spontanea che non sono supportati da questo albero strato

Chiunque mai visto questo? Cosa posso fare di sbagliato?

risposta

42

capito, Apple ha deciso di cambiare questo e richiedono una nuova bandiera per nessun motivo

progressIndicator.layerUsesCoreImageFilters = YES; 
+0

Grazie! Ho avuto lo stesso problema con setCompositingFilter: e questo lo risolve. – uliwitness

+2

Non è per nessun motivo, è perché per impostazione predefinita ora i CALayer sono resi fuori processo per consentire al sistema operativo di condividere meglio le risorse. Potrebbe sicuramente essere meglio documentato - posso suggerire un radar :)/cc @uliwitness –

+1

dai documenti per questo metodo ... Se si assegnano i filtri di Core Image alla propria vista usando setBackgroundFilters :, setCompositingFilter :, o setContentFilters: methods, you non è necessario chiamare questo metodo in modo esplicito. Questi metodi consentono a AppKit di riconoscere automaticamente che è necessario eseguire il rendering della gerarchia di livelli in-process. – uchuugaka