3

我正在尝试在 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 上应用渐变效果。我给定的代码内容哪里错了?

4

1 回答 1

0

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

下一个问题将是CAGradientLayer不支持像第二个屏幕截图中那样的径向渐变。您需要进行自定义绘图以实现该效果(或仅使用图像)。

于 2013-04-04T09:53:27.513 回答