2011-05-06 130 views
3

我想創建一個簡單的示例,將圖像繪製到圖層,然後設置該圖層的alpha蒙版。我將下面的代碼添加到我的示例應用程序的viewDidLoad中。沒有設置面具,我可以看到葉子的圖像。在我設置面具之後,我看不到任何我的子層。我究竟做錯了什麼?CALayer alpha蒙版不工作

這裏有兩個圖像我使用(只樣本我在網上找到) http://sorenworlds.netfirms.com/Alpha/leaf.jpg

http://sorenworlds.netfirms.com/Alpha/leaf-alfa.jpg

self.view.layer.backgroundColor = [UIColor orangeColor].CGColor; 
self.view.layer.cornerRadius = 20.0; 
self.view.layer.frame = CGRectInset(self.view.layer.frame, 20, 20); 


CALayer *sublayer = [CALayer layer]; 
sublayer.backgroundColor = [UIColor blueColor].CGColor; 
sublayer.shadowOffset = CGSizeMake(0, 3); 
sublayer.shadowRadius = 5.0; 
sublayer.shadowColor = [UIColor blackColor].CGColor; 
sublayer.shadowOpacity = 0.8; 
sublayer.frame = CGRectMake(30, 30, 128, 192); 
[self.view.layer addSublayer:sublayer]; 

CGImageRef img = [UIImage imageNamed:@"leaf.jpg"].CGImage; 
sublayer.borderColor = [UIColor blackColor].CGColor; 
sublayer.borderWidth = 2.0; 
sublayer.contents = img; 

CGImageRef imgAlpha = [UIImage imageNamed:@"leaf_alpha.jpg"].CGImage; 
CALayer *alphaLayer = [CALayer layer]; 
alphaLayer.contents = (id)imgAlpha; 
sublayer.mask = alphaLayer; 

任何幫助是極大的讚賞。

回答

11

有幾個問題與您的代碼:

  1. 的CALayer的類引用說,掩膜層的阿爾法是用來掩蓋父層。您的遮罩層(alphaLayer)是使用不包含Alpha值的JPG創建的。 Quartz並不理解你想在掩模圖像中使用灰度RGB像素值作爲alpha值,並且沒有可以調用的代碼(據我所知)。

    石英可能會解釋爲什麼沒有顯示每個像素的面具圖像中的alpha值爲0 alpha。

    我建議像Pixelmator那樣得到一個繪圖程序,然後從原始葉子圖像中製作一個PNG文件(內置了alpha值)。這樣做不需要在代碼中添加遮罩層。

  2. 您的文件名是「leaf-alfa.jpg」,但它是代碼中的「leaf_alpha.jpg」。

  3. 必須在其父圖層的座標中佈置子圖層。您沒有這樣做,也沒有爲遮罩層設置邊界。圖層的默認邊界是空的矩形,所以即使您使用具有適當的alpha蒙版的圖像,您仍然不會看到任何內容(或者可能只是沒有蒙版的原始圖像)。你需要做這樣的事情:

    alphaLayer.bounds = CGRectMake(0, 0, 128, 192); 
    alphaLayer.position = CGPointMake(sublayer.bounds.size.width/2.0, 
                sublayer.bounds.size.height/2.0); 
    
+0

感謝。 #1和3做的伎倆。感謝幫助。 – 2011-05-08 11:31:32