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?
Grazie! Ho avuto lo stesso problema con setCompositingFilter: e questo lo risolve. – uliwitness
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 –
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