使用CALayers添加蒙版

13

我似乎在使用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是一张黑色图片,中间有一个透明的圆形区域(这样使用蒙版正确吗?)。我不确定问题出在哪里,也许是在maskLayer.contents,因为它应该是CGImageRef类型,但是当我将其设置为mask.CGImage时会出错,或者通过一个局部变量CGImageRef = mask.CGImage。无论如何,现在的设置没有报错,所以我希望没问题。

是否有人知道发生了什么情况,或者如何正确地使用CALayers设置蒙版?谢谢。

2个回答

22

尝试一下

maskLayer.contents = (id)mask.CGImage;

是的,强制类型转换不好,但它是必要的。


我认为你还需要说

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

嘿,感谢您在原始问题上的帮助,我试图按照您的建议进行操作。但是,似乎这也行不通。我看不到任何掩码或我的viewToMask。 - user339946
@user339946:你可能需要定义maskLayerbounds - Lily Ballard
框架对我也很有效。喜欢应用遮罩所需的代码很少...太棒了。谢谢大家。 - Jesse Head

13

试试这个:

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

你还需要设置遮罩帧


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接