O tutorial usa este método com dois parâmetros: image
e maskImage
, estes você deve definir ao chamar o método. Um exemplo de chamada poderia ser assim, supondo que o método esteja na mesma classe e as imagens estejam em seu pacote:
Observação - surpreendentemente, as imagens nem precisam ter o mesmo tamanho.
...
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;
}
Depois que você forneceu seu código, adicionei alguns números como comentários para referência. Você ainda tem duas opções. Tudo isso é um método, que você está chamando em algum lugar. Você não precisa criar as imagens dentro dele: isso reduz a reutilização do método a zero.
Para fazer seu código funcionar. Altere os métodos head ( 1. ) para
- (UIImage *)maskImageMyImages {
Em seguida, altere o nome da variável em 2. para
UIImage *maskImage = [UIImage imageNamed:@"mask.png"];
O método retornará suas imagens mascaradas, então você terá que chamar este método em algum lugar. Você pode nos mostrar o código onde está chamando seu método?