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不支持像第二个屏幕截图那样的径向渐变。 你需要做自定义绘图来达到这个效果(或者只是使用图片)。