使用CALayers添加遮罩

时间:2012-03-07 03:41:48

标签: iphone ios xcode quartz-graphics

我似乎很难通过CALayers添加面具。我只是想掩盖一个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时,或者通过局部变量{{}时会出现错误1}}。无论如何,它现在设置的方式不会出错,所以我希望它没问题。

有谁知道发生了什么,或者如何使用CALayers正确设置面具?感谢

2 个答案:

答案 0 :(得分:19)

尝试

maskLayer.contents = (id)mask.CGImage;

是的,演员很糟糕,但这是必要的。


我想你还需要说

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

答案 1 :(得分: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];

您还需要设置遮罩框架