简体   繁体   English

CAShapeLayer的渐变色效果

[英]Gradient color effect on CAShapeLayer

I'm trying to apply gradient colors on CAShapeLayer. 我正在尝试在CAShapeLayer上应用渐变色。 For that i write code, 为此我写代码,

-(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];
}

But i got without gradient color output like this, 但我没有像这样的渐变色输出, 在此输入图像描述

I want the final output like this, 我想要这样的最终输出, 在此输入图像描述

But my primarily goal is apply gradient effects on CAShapeLayer. 但我的主要目标是在CAShapeLayer上应用渐变效果。 Where i'm wrong in my given code stuff? 在我给出的代码中我错了什么?

The main problem is that you're adding shapeLayer to the view's layer, but you actually just want to use that as a mask, so you should be adding gradientLayer instead. 主要的问题是你将shapeLayer添加到视图的图层,但实际上你只想将它用作蒙版,所以你应该添加gradientLayer

The next problem will be that CAGradientLayer doesn't support radial gradients like the one in your second screenshot. 接下来的问题是CAGradientLayer不支持像第二个屏幕截图中那样的径向渐变。 You'll need to do custom drawing to achieve that effect (or just use an image). 您需要进行自定义绘制才能实现该效果(或仅使用图像)。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM