2012-06-13 64 views
2

在我的應用程序中,我有一個視圖,我希望它在左側和右側有一個小的透明漸變。我可以很輕鬆地創建左邊或右邊的梯度,但我不知道如何將它們結合起來:CALayer面具 - 結合兩層

CAGradientLayer *rightLayer = [CAGradientLayer layer]; 
rightLayer.frame = self.bounds; 
rightLayer.colors = [NSArray arrayWithObjects:(id)[UIColor whiteColor].CGColor, (id)[UIColor clearColor].CGColor, nil]; 
rightLayer.startPoint = CGPointMake(0.8f, 1.0f); 
rightLayer.endPoint = CGPointMake(1.0f, 1.0f); 

CAGradientLayer *leftLayer = [CAGradientLayer layer]; 
leftLayer.frame = self.bounds; 
leftLayer.colors = [NSArray arrayWithObjects:(id)[UIColor clearColor].CGColor,(id)[UIColor whiteColor].CGColor, nil]; 
leftLayer.startPoint = CGPointMake(0.0f, 1.0f); 
leftLayer.endPoint = CGPointMake(0.2f, 1.0f); 


self.layer.mask = leftLayer; 

正如你所看到的,問題是,我必須指派只有1層掩蓋,我想它有2層。我如何合併leftLayer和rightLayer?或者我如何添加這兩個圖層來掩蓋?

非常感謝您的回答!

回答

4

您將不得不創建一個梯度圖層,梯度從清晰到白色再次清除,並將locations設置爲三個點。因此,您必須將endPoint設置在視圖的另一側(覆蓋整個寬度),方法是將其設置爲1.

您需要將點放在NSValue對象中以將它們添加到locations數組中,像這樣:[NSValue valueWithCGPoint:myCGPoint];

由於位置定義在0和1之間。您將必須根據要屏蔽的圖層的寬度來計算值。事情是這樣的:

0.2/width   // left edge 
(width-0.2)/width // right edge 

您已經設定在0〜1之間的起點和終點,因此只要使用相同的值。

+0

嗯......我已經試過了。我設置顏色,但是當我不能將cgpoints添加到位置時......我該怎麼做? –

+0

@animal_chin添加一個這樣的NSValue:'[NSValue valueWithCGPoint:myCGPoint];' –

+0

完成了它!最終解決方案如下所示: CAGradientLayer * combined = [CAGradientLayer layer]; combined.frame = self.bounds; (id)[UIColor whiteColor] .CGColor,(id)[UIColor whiteColor] .CGColor,(id)[UIColor clearColor] .CGColor,nil(組合顏色) ]。 combined.startPoint = CGPointMake(0.0f,1.0f); combined.endPoint = CGPointMake(1.0f,1.0f); 也許設置位置會改善一點,但對我來說這工作得很好:) –

2

訣竅是使用其他人提到的「位置」。下面的代碼在頂部和底部做了一個「淡出」漸變 - 如果你想讓滾動文本在兩端都淡出你的屏幕,這很有用。位置停止在下面應該被讀爲0.0 => 0.1從淡變爲淡變白,然後0.9 => 1.0從白變淡再次變清。

CAGradientLayer *gradient = [CAGradientLayer layer]; 
gradient.frame = self.bounds; 
gradient.colors = @[(id)[[UIColor clearColor] CGColor], (id)[[UIColor whiteColor] CGColor], (id)[[UIColor whiteColor] CGColor], (id)[[UIColor clearColor] CGColor]]; 
gradient.startPoint = CGPointMake(0.5, 0.0); 
gradient.endPoint = CGPointMake(0.5, 1.0); 
gradient.locations = @[@0.0, @0.1, @0.9, @1.0]; 

[self.layer setMask:gradient]; 

請記得在您的文件中包含#import <QuartzCore/QuartzCore.h>