Hướng dẫn sử dụng phương thức này với hai tham số: image
và maskImage
, những tham số này bạn phải đặt khi gọi phương thức. Một cuộc gọi ví dụ có thể trông như thế này, giả sử phương thức nằm trong cùng một lớp và các ảnh nằm trong gói của bạn:
Lưu ý - đáng kinh ngạc là các hình ảnh thậm chí không cần phải có cùng kích thước.
...
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;
}
Sau khi bạn cung cấp mã của mình, tôi đã thêm một số con số dưới dạng nhận xét vào nó để tham khảo. Bạn vẫn có hai lựa chọn. Toàn bộ điều này là một phương pháp, mà bạn đang gọi ở đâu đó. Bạn không cần phải tạo các hình ảnh bên trong nó: điều này làm giảm khả năng tái sử dụng của phương pháp xuống 0.
Để mã của bạn hoạt động. Thay đổi đầu phương thức ( 1. ) thành
- (UIImage *)maskImageMyImages {
Sau đó, thay đổi tên của biến trong 2. thành
UIImage *maskImage = [UIImage imageNamed:@"mask.png"];
Phương thức này sẽ trả về các hình ảnh bị che, vì vậy bạn sẽ phải gọi phương thức này ở một số nơi. Bạn có thể cho chúng tôi xem mã nơi bạn đang gọi phương thức của mình không?