Как замаскировать UIView

Я работаю над приложением, где я тяну UIView с помощью кода, и я заполняю его UIColor. Следующая вещь я хочу загрузить mask.png файл (никакая прозрачность, просто черная и белая) и замаскировать UIView для изменения его общего вида.

Какая-либо идея, как сделать это?

27
задан bneely 11 April 2014 в 19:49
поделиться

2 ответа

Благодарю,

получил следующую функцию:

- (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];

}
3
ответ дан 28 November 2019 в 04:25
поделиться

Вы можете использовать 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 );
}
5
ответ дан 28 November 2019 в 04:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: