Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 用CAShapeLayer实现绘制渐变圆弧_Ios_Objective C_Uiview_Cashapelayer_Cagradientlayer - Fatal编程技术网

Ios 用CAShapeLayer实现绘制渐变圆弧

Ios 用CAShapeLayer实现绘制渐变圆弧,ios,objective-c,uiview,cashapelayer,cagradientlayer,Ios,Objective C,Uiview,Cashapelayer,Cagradientlayer,参考已被接受的答案,我试图实现这一点,但遇到了CAShapeLayer路径问题,我的代码如下: -(void)drawGradientArc{ UIBezierPath *bezierPath = [UIBezierPath bezierPath]; CAShapeLayer *circleLayer = [CAShapeLayer new]; circleLayer.lineWidth = 25; circleLayer.fillColor = [UIColo

参考已被接受的答案,我试图实现这一点,但遇到了
CAShapeLayer
路径问题,我的代码如下:

-(void)drawGradientArc{
    UIBezierPath *bezierPath = [UIBezierPath bezierPath];

    CAShapeLayer *circleLayer = [CAShapeLayer new];
    circleLayer.lineWidth = 25;
    circleLayer.fillColor = [UIColor clearColor].CGColor;
    circleLayer.strokeColor = [UIColor redColor].CGColor;

    CGFloat radius = 150;


    [bezierPath addArcWithCenter:self.view.center radius:radius startAngle:0 endAngle:M_PI clockwise:YES];


    CAGradientLayer *gradientLayer = [CAGradientLayer layer];
    gradientLayer.startPoint = CGPointMake(0,0);
    gradientLayer.endPoint = CGPointMake(1,0);


    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:circleLayer];

    circleLayer.path = bezierPath.CGPath;

    [self.view.layer addSublayer:circleLayer];
}
-(无效)drawGradientArc{
UIBezierPath*bezierPath=[UIBezierPath bezierPath];
CAShapeLayer*circleLayer=[CAShapeLayer new];
circleLayer.lineWidth=25;
circleLayer.fillColor=[UIColor clearColor].CGColor;
circleLayer.strokeColor=[UIColor redColor].CGColor;
CGFloat半径=150;
[bezierPath addArcWithCenter:self.view.center radius:radius startAngle:0 endAngle:M_PI顺时针:是];
CAGradientLayer*梯度层=[CAGradientLayer层];
gradientLayer.startPoint=CGPointMake(0,0);
gradientLayer.endPoint=CGPointMake(1,0);
NSMutableArray*颜色=[NSMutableArray];
对于(int i=0;i<10;i++){
[colors addObject:(id)[[UIColor colorWithHue:(0.1*i)饱和度:1亮度:8 alpha:1]CGColor];
}
gradientLayer.colors=颜色;
[gradientLayer设置掩码:circleLayer];
circleLayer.path=bezierPath.CGPath;
[self.view.layer addSublayer:circleLayer];
}
这将正确绘制半圆弧,但渐变的路径设置不正确,我无法拼凑出如何准确配置代码以使用渐变使其工作。有一个
CGPathCreateCopyByStrokingPath
,我想我可能还需要调用它来为渐变设置正确的路径,但不太确定如何设置。任何关于如何构造代码以使其工作的帮助都将不胜感激。我还包括了一幅我试图重现的渐变图像。一个
CAShapeLayer
CAGradientLayer
方法将是理想的


问题1:您的层没有帧。添加以下内容:

gradientLayer.frame = self.view.layer.bounds;
circleLayer.frame = gradientLayer.bounds;
问题2:将错误的图层添加到视图的图层。如果您有:

[self.view.layer addSublayer:circleLayer];
换言之:

[self.view.layer addSublayer:gradientLayer];
结果


问题1:您的层没有帧。添加以下内容:

gradientLayer.frame = self.view.layer.bounds;
circleLayer.frame = gradientLayer.bounds;
问题2:将错误的图层添加到视图的图层。如果您有:

[self.view.layer addSublayer:circleLayer];
换言之:

[self.view.layer addSublayer:gradientLayer];
结果


这并不能解决您所有的问题,但至少您会在屏幕上看到一些有意义的东西,之后修复代码将非常简单。在设置gradientLayer和shapeLayer的框架时使用这一点完全可以满足需要。谢谢嗯,它和你的画是颠倒的。但这应该很容易解决!是的,没问题,我只需要看看彩虹弧就行了。再次感谢!是的,我想看到彩虹会让你更快乐这并不能解决你所有的问题,但至少你会在屏幕上看到一些有意义的东西,在那之后修复你的代码将是非常简单的。在设置gradientLayer和shapeLayer的框架时使用这一点完全可以满足需要。谢谢嗯,它和你的画是颠倒的。但这应该很容易解决!是的,没问题,我只需要看看彩虹弧就行了。再次感谢!是的,我想看到彩虹会让你更快乐