2013-04-04 63 views
3

我试图在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]; 
} 

但我有没有这样的渐变色输出, enter image description here

我想这样最后输出, enter image description here

但我的主要目标是采用梯度对CAShapeLayer有影响。我在给定的代码中错了什么地方?

+3

**在'drawRect:'内添加子图层肯定是错误的。** – 2013-04-04 08:33:32

+0

这就是说:你似乎在混合两种不同的绘图方法。一个是在drawRect中定制绘图:一个是图层。无论选择哪种方法,您都必须在添加阴影和遮盖白色渐变的几个步骤中完成绘图。你能否澄清一下你有什么问题? – 2013-04-04 08:38:14

+0

@DavidRönnqvist,首先我很高兴向我展示我的错误。我想在红色圆圈上应用渐变颜色效果。看到我的第二张图片,我想创建相同的效果。其实我不知道如何创建末端输出米圈,但我认为第二幅图像上的薄白色颜色就像渐变图层,为什么我选择了这种场景。 – Tirth 2013-04-04 08:57:01

回答

0

主要问题是您要将shapeLayer添加到视图的图层,但实际上您只是想将其用作蒙版,所以您应该添加gradientLayer

下一个问题是CAGradientLayer不支持第二个屏幕截图中的径向渐变。您需要进行自定义绘图才能达到该效果(或者只是使用图像)。

+0

哦!第二张图片包含径向渐变效果?现在我想知道如何使用图像创建渐变效果。 – Tirth 2013-04-04 09:59:35