我会尽可能简单。
如何在iOS中的CALayers
创建反向掩码?
我有一个红色视图和一个用于遮盖红色视图的图像。
我使用视图的CALayer
的mask属性来应用掩码,结果如下。
然而,我所希望的是相反的结果,例如 (想象一下,这里的白色部分实际上是背景中的木材,因为我对图像编辑软件不是很好)
换言之:我希望遮蔽图像在视图中打孔,而不是作为实际的遮罩层。 C#(MonoTouch)或Obj-C中的答案都很好
答案 0 :(得分:5)
希望它有用
步骤1:创建一个没有任何alpha通道的遮罩。
步骤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];
答案 1 :(得分:1)
您需要反转蒙版的alpha,因此“孔”是透明像素。您还需要拉伸图像以覆盖整个红色视图。