2016-06-11 100 views
0

我使用CAShapeLayer畫圓並將其設置爲CAGradientLayer的掩模,這裏是代碼:CAGradientLayer未畫出梯度正確

CAShapeLayer *circleShapeLayer = [CAShapelayer new]; 
// draw circle path code here... 

CAGradientLayer *gradientLayer = [CAGradientLayer layer]; 
gradientLayer.colors = @[(__bridge id)[UIColor whiteColor].CGColor, 
         (__bridge id)[UIColor clearColor].CGColor]; 
// self here means a UIView 
gradientLayer.mask = circleShapeLayer; 
gradientLayer.frame = self.bounds; 
[self.layer addSublayer:gradientLayer]; 

當運行該應用程序,它將顯示一個漸變圓,但梯度很奇怪。

我要的是一個圓圈,在起點,顏色爲白色,並在終點色彩分明的顏色,它應該是這樣的:

enter image description here

但圓的顏色在Simulator屏幕是:

enter image description here

顏色是對稱的。

我認爲問題是我沒有正確設置​​,我該如何解決?

+0

你試過嗎? http://stackoverflow.com/questions/5448618/cagradientlayer-showing-as-solid-color/5449257 –

回答

1

CAGradientLayer不能沿圓弧繪製漸變。另一方面,掩模層的框架比梯度層的框架太小而看不到清晰的顏色

0

要Umair的迴應,它並沒有在第一意義,我因爲即使whiteColorblackColor正在colorWithRed:green:blue:alpha牽強,但後來我的文檔中閱讀:

在渲染時,該顏色映射到插值前的輸出色彩空間。

因此,也許這真的是它:

gradientLayer.colors = @[(__bridge id)[UIColor colorWithRed:1.0f green:1.0f blue:1.0f alpha:1.0f].CGColor, 
         (__bridge id)[UIColor colorWithRed:1.0f green:1.0f blue:1.0f alpha:0.0f].CGColor]; 
+0

不適合我。 – CokileCeoi

0

@ J.Hunter的answer是正確的,因爲CAGradientLayers不能沿着圓弧畫出。這意味着您的繪製漸變將被限制爲radiallinear。您特別期待創建一個漸變,我也試圖在過去創建一個漸變。

不幸的是,CAGradientLayer必然會受到這些限制,而且我發現創建遮罩傾斜漸變的最佳方法是使用包含傾斜漸變的UIImage進行遮罩。這不會像繪製自己的漸變那樣動態,但它似乎是目前最好的(可能是唯一的)選項。