2012-03-07 13 views
12

Mi sembra che abbia difficoltà ad aggiungere una maschera tramite CALayers. Sto semplicemente cercando di mascherare un UIImageView. Qui è il mio codice: (? È in questo modo corretto per mascherare)Aggiunta di una maschera con CALayers

CALayer *maskLayer = [CALayer layer]; 
UIImage *mask = [UIImage imageNamed:@"mask.png"]; 
maskLayer.contents = mask; 

UIImageView *viewToMask = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 1024, 768)]; 
viewToMask.image = [UIImage imageNamed:@"picture.png"]; 
viewToMask.layer.mask = maskLayer; 
[self.view addSubview:viewToMask]; 

mask.png è nera con un cerchio trasparente perforato attraverso di essa. Non sono sicuro di dove ciò stia fallendo, forse a maskLayer.contents poiché dovrebbe essere un CGImageRef ma ottengo errori quando lo imposto come mask.CGImage o tramite una variabile locale CGImageRef = mask.CGImage. Ad ogni modo, il modo in cui il set ora non dà errori, quindi spero che vada bene.

Qualcuno sa cosa sta succedendo o come impostare correttamente le maschere con CALayers? Grazie

risposta

19

Prova

maskLayer.contents = (id)mask.CGImage; 

Sì, il cast fa schifo, ma è necessario.


penso avrete anche bisogno di dire

maskLayer.bounds = (CGRect){CGPointZero, mask.size}; 
+0

Ehi, grazie per il vostro aiuto su la domanda originale, stavo cercando di seguire con i tuoi suggerimenti. Comunque, anche questo non sembra fare il trucco. Non vedo maschere o il mio viewToMask per quella materia. – user339946

+0

@ user339946: Probabilmente è necessario definire i 'limiti' di' maskLayer'. –

+1

La cornice ha funzionato per me, i limiti no. –

13

provare questo:

CALayer *maskLayer = [CALayer layer]; 
UIImage *mask = [UIImage imageNamed:@"mask.png"]; 
maskLayer.contents = (id)mask.CGImage; 
// maskLayer.contentsGravity = kCAGravityCenter; 
maskLayer.frame = CGRectMake(0.0, 0.0,1024,768); 

UIImageView *viewToMask = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 1024, 768)]; 
viewToMask.image = [UIImage imageNamed:@"picture.png"]; 
viewToMask.layer.mask = maskLayer; 
[self.view addSubview:viewToMask]; 

è anche necessario impostare telaio della maschera

Problemi correlati