2012-03-07 52 views
12

我似乎无法通过CALayers添加蒙版。我只是试图掩盖一个UIImageView。这里是我的代码:(?是掩盖这种正确的方法)使用CALayers添加蒙版

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的面罩?由于

回答

19

尝试

maskLayer.contents = (id)mask.CGImage; 

是,演员很烂,但它是必要的。


我想你还需要说

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

嘿,感谢你的帮助上设置罩框原来的问题,我试图通过你的建议。无论如何,这似乎也没有伎俩。我没有看到任何面具或我的viewToMask。 – user339946 2012-03-07 03:56:51

+0

@ user339946:您可能需要定义'maskLayer'的'bounds'。 – 2012-03-07 04:25:47

+1

框架为我工作,界限没有。 – 2013-07-21 12:44:42

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

还需要