我会尽可能简单。
如何在 iOS 中的 CALayers
上创建反转蒙版?
我有一个红色 View 和一个用于遮盖红色 View 的图像。
我使用 View 的 CALayer
的 mask 属性应用蒙版,结果如下。
然而我想要的是相反的结果,比如 (假设这里的白色部分实际上是背景中的木头,因为我不太会修图软件)
换句话说:我希望 mask 图像在 View 中打一个洞,而不是充当实际的 mask 层。 C# (MonoTouch) 或 Obj-C 的答案都很好
最佳答案
希望对你有帮助
第 1 步:创建一个没有任何 alpha channel 的 mask 。
第 2 步:通过以下方法创建反转掩码
- (UIImage*)createInvertMask:(UIImage *)maskImage withTargetImage:(UIImage *) image {
CGImageRef maskRef = maskImage.CGImage;
CGBitmapInfo bitmapInfo = kCGImageAlphaNone;
CGColorRenderingIntent renderingIntent = kCGRenderingIntentDefault;
CGImageRef mask = CGImageCreate(CGImageGetWidth(maskRef),
CGImageGetHeight(maskRef),
CGImageGetBitsPerComponent(maskRef),
CGImageGetBitsPerPixel(maskRef),
CGImageGetBytesPerRow(maskRef),
CGColorSpaceCreateDeviceGray(),
bitmapInfo,
CGImageGetDataProvider(maskRef),
nil,
NO,
renderingIntent);
CGImageRef masked = CGImageCreateWithMask([image CGImage], mask);
CGImageRelease(mask);
CGImageRelease(maskRef);
return [UIImage imageWithCGImage:masked];
}
第 3 步:通过以下方法将反转掩码设置为 UIView
- (void)maskWithImage:(UIImage*) maskImage TargetView:(UIView*) targetView {
CALayer *_maskingLayer = [CALayer layer];
_maskingLayer.frame = targetView.bounds;
[_maskingLayer setContents:(id)[maskImage CGImage]];
[targetView.layer setMask:_maskingLayer];
}
完成。
如何调用?
UIImage* targetImage = [UIImage imageNamed:@"sky_bg.png"];
UIImage* mask = [UIImage imageNamed:@"mask01.png"];
UIImage* invertMask = [self createInvertMask:mask withTargetImage:targetImage];
[self maskWithImage:invertMask TargetView:targetview];
关于ios - 如何在 CALayers 上创建反向蒙版,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8155412/