2016-06-11 46 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进行遮罩。这不会像绘制自己的渐变那样动态,但它似乎是目前最好的(可能是唯一的)选项。