2012-03-07 73 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]; 

還需要