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
Adding a mask with CALayers
提问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.contents
since its supposed to be a CGImageRef
but 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
您还需要设置遮罩框