如何绘制渐变填充弧,即彩虹?

以下代码绘制了一个从红色到绿色渐变的半圆。 这不是我想要的。 我期望一个宽度为5像素的圆弧,用渐变绘制。

任何帮助显示我出了什么地方将不胜感激。

查尔斯

-(void) DrawRainbow { // Create an arc path float x = 150.0; float y = 220.0; float radius = 75.0; float startAngle = M_PI; float endAngle = 2*M_PI; bool clockWise = false; CGMutablePathRef path = CGPathCreateMutable(); CGPathAddArc(path, nil, x, y, radius, startAngle, endAngle, clockWise); // Setup the gradient size_t num_locations = 2; CGFloat locations[2] = { 0.0, 1.0 }; CGFloat components[8] = { 1.0, 0.0, 0.0, 1.0, // Start color is red 0.0, 1.0, 0.0, 1.0 }; // End color is green CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB(); CGGradientRef gradientFill = CGGradientCreateWithColorComponents (colorSpace, components, locations, num_locations); // setup gradient points CGRect pathRect = CGPathGetBoundingBox(path); CGPoint myStartPoint, myEndPoint; myStartPoint.x = CGRectGetMinX(pathRect); myStartPoint.y = CGRectGetMinY(pathRect); myEndPoint.x = CGRectGetMaxX(pathRect); myEndPoint.y = CGRectGetMinY(pathRect); // draw the gradient CGContextRef context = UIGraphicsGetCurrentContext(); CGContextSetLineWidth(context, 5.0); CGContextAddPath(context, path); CGContextSaveGState(context); CGContextClip(context); CGContextDrawLinearGradient (context, gradientFill, myStartPoint, myEndPoint, 0); CGContextRestoreGState(context); CGGradientRelease(gradientFill); CGColorSpaceRelease(colorSpace); 

}

由此产生的梯度,对我来说,看起来像一个燃料表的背景,所以径向梯度可能不会产生适当的效果。 我没有很多石英的经验,但我的想法是用背景颜色填充一个椭圆。

在这里输入图像说明

 radius -= 5.0; CGRect rainbowArch = CGRectMake( x - radius, y - radius, 2 * radius, 2 * radius); const CGFloat * bgComponents = CGColorGetComponents( self.backgroundColor.CGColor ); CGContextSetRGBFillColor(context, bgComponents[0], bgComponents[1], bgComponents[2], 1.0); CGContextFillEllipseInRect( context, rainbowArch ); ... CGContextRestoreGState(context); CGGradientRelease(gradientFill); CGColorSpaceRelease(colorSpace);