Il tutorial utilizza questo metodo con due parametri: image
e maskImage
, questi devi impostare quando chiami il metodo. Una chiamata di esempio potrebbe essere simile a questa, supponendo che il metodo sia nella stessa classe e le immagini siano nel tuo pacchetto:
Nota: sorprendentemente le immagini non devono nemmeno avere le stesse dimensioni.
...
UIImage *image = [UIImage imageNamed:@"dogs.png"];
UIImage *mask = [UIImage imageNamed:@"mask.png"];
// result of the masking method
UIImage *maskedImage = [self maskImage:image withMask:mask];
...
- (UIImage*) maskImage:(UIImage *)image withMask:(UIImage *)maskImage {
CGImageRef maskRef = maskImage.CGImage;
CGImageRef mask = CGImageMaskCreate(CGImageGetWidth(maskRef),
CGImageGetHeight(maskRef),
CGImageGetBitsPerComponent(maskRef),
CGImageGetBitsPerPixel(maskRef),
CGImageGetBytesPerRow(maskRef),
CGImageGetDataProvider(maskRef), NULL, false);
CGImageRef maskedImageRef = CGImageCreateWithMask([image CGImage], mask);
UIImage *maskedImage = [UIImage imageWithCGImage:maskedImageRef];
CGImageRelease(mask);
CGImageRelease(maskedImageRef);
// returns new image with mask applied
return maskedImage;
}
Dopo aver fornito il codice, ho aggiunto alcuni numeri come commenti per riferimento. Hai ancora due opzioni. Tutta questa cosa è un metodo, che stai chiamando da qualche parte. Non è necessario creare le immagini al suo interno: questo riduce a zero la riusabilità del metodo.
Per far funzionare il tuo codice. Modificare la testa dei metodi ( 1. ) in
- (UIImage *)maskImageMyImages {
Quindi modificare il nome della variabile in 2. in
UIImage *maskImage = [UIImage imageNamed:@"mask.png"];
Il metodo restituirà le tue immagini mascherate, quindi dovrai chiamare questo metodo da qualche parte. Puoi mostrarci il codice dove stai chiamando il tuo metodo?