В руководстве используется этот метод с двумя параметрами: image
и maskImage
, которые вы должны установить при вызове метода. Пример вызова может выглядеть следующим образом, при условии, что метод находится в том же классе, а изображения находятся в вашем комплекте:
Примечание - удивительно, что изображения даже не должны быть одинакового размера.
...
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;
}
После того, как вы предоставили свой код, я добавил некоторые цифры в качестве комментариев к нему для справки. У вас еще есть два варианта. Все это метод, который вы где-то вызываете. Вам не нужно создавать изображения внутри него: это уменьшает возможность повторного использования метода до нуля.
Чтобы ваш код работал. Измените заголовок метода ( 1. ) на
- (UIImage *)maskImageMyImages {
Затем измените имя переменной в 2. на
UIImage *maskImage = [UIImage imageNamed:@"mask.png"];
Метод вернет ваши маскированные изображения, поэтому вам придется вызывать этот метод в каком-то месте.
Можете ли вы показать нам код, где вы вызываете свой метод?