Objective c 做一个梯度弧?

Objective c 做一个梯度弧?,objective-c,cagradientlayer,Objective C,Cagradientlayer,我想用CAGradientLayer以这样的方式制作一个圆弧:- 20%的弧具有相同的单色,而其他80%的弧具有两种颜色的渐变。 我已经用手试过了 CAGradientLayer的startPoint endPoint属性,但无法获得成功,并且已经通过了教程,但不知何故无法正确理解该概念。请用清晰的描述解决我的问题 // for beizier path - (UIBezierPath *)samplePath { UIBezierPath *path = [UIBezierPath b

我想用CAGradientLayer以这样的方式制作一个圆弧:-

20%的弧具有相同的单色,而其他80%的弧具有两种颜色的渐变。 我已经用手试过了 CAGradientLayer的startPoint endPoint属性,但无法获得成功,并且已经通过了教程,但不知何故无法正确理解该概念。请用清晰的描述解决我的问题

// for beizier path
- (UIBezierPath *)samplePath
{
    UIBezierPath *path = [UIBezierPath bezierPath];

   path = [UIBezierPath bezierPath];
    [path addArcWithCenter:CGPointMake(200, 200) radius:30.0f startAngle:(3*M_PI)/4 endAngle:M_PI/4   clockwise:YES];
     path.lineWidth = 30;
    [[UIColor redColor] setStroke];
    // [[UIColor colorWithRed:arc4random() green:arc4random() blue:arc4random() alpha:1.0] setFill];
    [path stroke];

    return path;
}

- (void)startAnimation
{
    CAShapeLayer *shapeLayer;
    if (self.pathLayer == nil)
    {
        shapeLayer = [CAShapeLayer layer];

        shapeLayer.path = [[self samplePath] CGPath];
        shapeLayer.strokeColor = [[UIColor redColor] CGColor];
        shapeLayer.fillColor = nil;
        shapeLayer.lineWidth = 30;
        self.pathLayer = shapeLayer;
    }

    [self animationBasic];
    [self gradientLayer:shapeLayer];


}
-(void)animationBasic
{
    CABasicAnimation *pathAnimation = [CABasicAnimation animationWithKeyPath:@"strokeEnd"];
    pathAnimation.duration = 3.0;
    pathAnimation.fromValue = @(0.0f);
    pathAnimation.toValue = @(1.0f);
    [self.pathLayer addAnimation:pathAnimation forKey:@"strokeEnd"];
}

-(void)gradientLayer:(CAShapeLayer *)shapelayer
{

    CAGradientLayer *gradientLayer = [CAGradientLayer layer];
    gradientLayer.frame = self.frame;
    gradientLayer.colors = @[(__bridge id)[UIColor yellowColor].CGColor,(__bridge id)[UIColor redColor].CGColor ];
    gradientLayer.locations = [NSArray arrayWithObjects:
                               [NSNumber numberWithFloat:0.5f],
                               [NSNumber numberWithFloat:1.0f],
                               nil];
    //    gradientLayer.startPoint = CGPointMake(0,1);
    //    gradientLayer.endPoint = CGPointMake(1,1);
    [self.layer addSublayer:gradientLayer];
    gradientLayer.mask = shapelayer;

}
CAGradientLayer实例的locations属性应使用我知道的起点填充,单词stops使其听起来与颜色属性中指定的每种颜色相反,从0到1。这些停止从上到下垂直渲染

因此,这应该是可行的:

gradientLayer.locations = [NSArray arrayWithObjects:
                           [NSNumber numberWithFloat:0.0f],
                           [NSNumber numberWithFloat:0.5f],
                           nil];
现在,同时,如果要使渐变水平或任何其他方向,可以使用startPoint和endPoint属性

gradientLayer.startPoint = CGPointMake(0.0, 0.5); //Default is (0.5, 0,0)
gradientLayer.endPoint = CGPointMake(1.0, 0.5);   //Default is (0.5, 1.0)
//The gradientLayer will be rendered horizontally.
“起点”和“终点”属性确定图层中渐变的方向和布局。它们在单位坐标系中定义,其中每个点定义为一组单位坐标,左上角为原点。因此,0,0对应于原点,1,1对应于右下角。你可以检查一下这个很好的解释

总之,渐变是按照“起点”和“终点”属性指定的方向和区域渲染的,颜色是按照“位置”属性中指定的比例渲染的


最后,只有通过修改属性并使用各种组合来查看渲染效果,才能完全理解这一点。

您需要使用locations属性。。。发布您尝试过的代码,我们将帮助您正确使用。@ZeMoon好的,我正在做it@ZeMoon请看一看,请让我准确地理解这个概念。看一看我的答案。有人能帮我解决这个问题吗?我所理解的地点如果我错了,请纠正我,它说用第一种颜色填充一半,用第二种颜色填充另一半,但不能得到s.p和e.p的概念。起点和终点属性指定整个渐变层在该层中的起点和终点。它可以是从层中的任何相对点到另一个相对点。如果你仍然不能理解,请告诉我你到底不能理解什么。看@zemoon位置清楚地说,如果我给gradientLayer框架等于view frame,那么它将填充框架0.0到0.5部分的黄色,其余部分是红色,但我可以,我不理解起点和终点的概念。是的,但我不能给出径向梯度和我需要的THT,即后一个,我想用颜色填充40%的圆弧,其余的用其他颜色填充。你是否尝试过专门搜索径向梯度?