Le didacticiel utilise cette méthode avec deux paramètres: image
et maskImage
, vous devez les définir lorsque vous appelez la méthode. Un exemple d'appel pourrait ressembler à ceci, en supposant que la méthode est dans la même classe et que les images sont dans votre bundle:
Remarque - étonnamment, les images n'ont même pas besoin d'être de la même taille.
...
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;
}
Après avoir fourni votre code, j'ai ajouté quelques chiffres en tant que commentaires à titre de référence. Vous avez encore deux options. Tout cela est une méthode que vous appelez quelque part. Vous n'avez pas besoin de créer les images à l'intérieur: cela réduit la réutilisabilité de la méthode à zéro.
Pour faire fonctionner votre code. Changez la tête des méthodes ( 1. ) en
- (UIImage *)maskImageMyImages {
Puis changez le nom de la variable en 2. en
UIImage *maskImage = [UIImage imageNamed:@"mask.png"];
La méthode renverra vos images masquées, vous devrez donc appeler cette méthode à un endroit. Pouvez-vous nous montrer le code où vous appelez votre méthode?