Я работаю над приложением, где я тяну UIView с помощью кода, и я заполняю его UIColor. Следующая вещь я хочу загрузить mask.png файл (никакая прозрачность, просто черная и белая) и замаскировать UIView для изменения его общего вида.
Какая-либо идея, как сделать это?
Благодарю,
получил следующую функцию:
- (UIImage*) maskImage:(UIView *)image withMask:(UIImage *)maskImage {
UIGraphicsBeginImageContext(image.bounds.size);
[image.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
CGImageRef maskRef = maskImage.CGImage;
CGImageRef mask = CGImageMaskCreate(CGImageGetWidth(maskRef),
CGImageGetHeight(maskRef),
CGImageGetBitsPerComponent(maskRef),
CGImageGetBitsPerPixel(maskRef),
CGImageGetBytesPerRow(maskRef),
CGImageGetDataProvider(maskRef), NULL, false);
CGImageRef masked = CGImageCreateWithMask([viewImage CGImage], mask);
return [UIImage imageWithCGImage:masked];
}
Вы можете использовать CGContextClipToMask:
-(void) drawRect:(CGRect)dirty {
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSaveGState( context );
CGContextClipToMask( context , [self bounds] , [self maskImage] );
[super drawRect:dirty]; // or draw your color manually
CGContextRestoreGState( context );
}