CAShapeLayer上的渐变颜色效果
问题描述:
我试图在CAShapeLayer上应用渐变颜色。对于我写的代码,CAShapeLayer上的渐变颜色效果
-(void)addCircle{
{
// Drawing code
UIBezierPath *aPath = [UIBezierPath bezierPathWithArcCenter:CGPointMake(150, 150)
radius:125
startAngle:0
endAngle:DEGREES_TO_RADIANS(180)
clockwise:NO];
CAShapeLayer *shapeLayer = [[CAShapeLayer alloc] init];
[shapeLayer setFrame: self.frame];
[shapeLayer setPath: [aPath CGPath]];
shapeLayer.lineWidth = 30.0f;
[shapeLayer setStrokeColor:[[UIColor redColor] CGColor]];
shapeLayer.fillColor = [[UIColor clearColor] CGColor];
[shapeLayer setMasksToBounds:YES];
CAGradientLayer *gradientLayer = [CAGradientLayer layer];
gradientLayer.startPoint = CGPointMake(0.5,1.0);
gradientLayer.endPoint = CGPointMake(0.5,0.0);
gradientLayer.frame = CGRectMake(0, 0, self.bounds.size.width, self.bounds.size.height);
NSMutableArray *colors = [NSMutableArray array];
for (int i = 0; i < 10; i++) {
[colors addObject:(id)[[UIColor colorWithHue:(0.1 * i) saturation:1 brightness:.8 alpha:1] CGColor]];
}
gradientLayer.colors = colors;
[gradientLayer setMask:shapeLayer];
[self.layer addSublayer:shapeLayer];
}
但我有没有这样的渐变色输出,
我想这样最后输出,
但我的主要目标是采用梯度对CAShapeLayer有影响。我在给定的代码中错了什么地方?
答
主要问题是您要将shapeLayer
添加到视图的图层,但实际上您只是想将其用作蒙版,所以您应该添加gradientLayer
。
下一个问题是CAGradientLayer
不支持第二个屏幕截图中的径向渐变。您需要进行自定义绘图才能达到该效果(或者只是使用图像)。
+0
哦!第二张图片包含径向渐变效果?现在我想知道如何使用图像创建渐变效果。 – Tirth 2013-04-04 09:59:35
**在'drawRect:'内添加子图层肯定是错误的。** – 2013-04-04 08:33:32
这就是说:你似乎在混合两种不同的绘图方法。一个是在drawRect中定制绘图:一个是图层。无论选择哪种方法,您都必须在添加阴影和遮盖白色渐变的几个步骤中完成绘图。你能否澄清一下你有什么问题? – 2013-04-04 08:38:14
@DavidRönnqvist,首先我很高兴向我展示我的错误。我想在红色圆圈上应用渐变颜色效果。看到我的第二张图片,我想创建相同的效果。其实我不知道如何创建末端输出米圈,但我认为第二幅图像上的薄白色颜色就像渐变图层,为什么我选择了这种场景。 – Tirth 2013-04-04 08:57:01