xcode 使用 CALayer 添加蒙版

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/9595479/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-09-14 23:32:49  来源:igfitidea点击:

Adding a mask with CALayers

iphoneiosxcodequartz-graphics

提问by user339946

I seem to be having difficulties adding a mask via CALayers. I'm simply trying to mask a UIImageView. Here's my code:

我似乎在通过 CALayer 添加蒙版时遇到了困难。我只是想掩盖一个 UIImageView。这是我的代码:

 CALayer *maskLayer = [CALayer layer];
 UIImage *mask = [UIImage imageNamed:@"mask.png"];
 maskLayer.contents = mask;

UIImageView *viewToMask = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 1024, 768)];
viewToMask.image = [UIImage imageNamed:@"picture.png"];
viewToMask.layer.mask = maskLayer;
[self.view addSubview:viewToMask];

Mask.png is black with a transparent circle punched through it (is this correct way to mask?). I'm not sure where this is failing, perhaps at maskLayer.contentssince its supposed to be a CGImageRefbut I get errors when I set it as mask.CGImage, or through a local variable CGImageRef = mask.CGImage. Anyway, the way its set now doesn't give errors, so I hope its fine.

Mask.png 是黑色的,上面有一个透明的圆圈(这是正确的遮罩方法吗?)。我不确定这在哪里失败,也许是maskLayer.contents因为它应该是 aCGImageRef但是当我将它设置为mask.CGImage或通过局部变量时出现错误CGImageRef = mask.CGImage。无论如何,它现在的设置方式不会出错,所以我希望它没事。

Does anyone know what's going on, or how to properly set masks with CALayers? Thanks

有谁知道发生了什么,或者如何使用 CALayer 正确设置蒙版?谢谢

回答by Lily Ballard

Try

尝试

maskLayer.contents = (id)mask.CGImage;

Yes, the cast sucks, but it's necessary.

是的,演员阵容很烂,但这是必要的。



I think you'll also need to say

我想你还需要说

maskLayer.bounds = (CGRect){CGPointZero, mask.size};

回答by Hector

try this:

尝试这个:

CALayer *maskLayer = [CALayer layer];
UIImage *mask = [UIImage imageNamed:@"mask.png"];
maskLayer.contents = (id)mask.CGImage;
//  maskLayer.contentsGravity = kCAGravityCenter;
maskLayer.frame = CGRectMake(0.0, 0.0,1024,768);

UIImageView *viewToMask = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 1024, 768)];
viewToMask.image = [UIImage imageNamed:@"picture.png"];
viewToMask.layer.mask = maskLayer;
[self.view addSubview:viewToMask];

you also need to set mask frame

您还需要设置遮罩框