我知道如何画一个弧
我还发现如何从 here绘制一条梯度线
我发现两个函数可以绘制渐变:CGContextDrawLinearGradient和CGContextDrawRadialGradient.but如何绘制渐变弧?
我想实现像这样的图片:
我还发现如何从 here绘制一条梯度线
我发现两个函数可以绘制渐变:CGContextDrawLinearGradient和CGContextDrawRadialGradient.but如何绘制渐变弧?
我想实现像这样的图片:
解决方法
我花了很长时间寻找如何做到这一点,所以我以为我会发布的方式,我最终做到这一点.事实证明,这两个答案都是这个问题的绝佳答案:
Draw segments from a circle or donut
为了我的目的,我只使用该答案的绘图和渐变部分.结构看起来或多或少是这样的…
CGContextRef context = UIGraphicsGetCurrentcontext();
CGFloat arcStartAngle = M_PI;
CGFloat arcEndAngle = 2 * M_PI;
CGPoint startPoint = CGPointMake(...);
CGPoint endPoint = CGPointMake(...);
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
CGFloat colors[] =
{
1.0,0.0,1.0,//RGBA values (so red to green in this case)
0.0,1.0
};
CGGradientRef gradient = CGGradientCreateWithColorComponents(colorSpace,colors,NULL,2);
//Where the 2 is for the number of color components. You can have more colors throughout //your gradient by adding to the colors[] array,and changing the components value.
CGColorSpaceRelease(colorSpace);
//Now for the arc part...
CGMutablePathRef arc = CGPathCreateMutable();
CGPathMovetoPoint(arc,startPoint.x,startPoint.y);
//Here,the CGPoint self.arcCenter is the point around which the arc is placed,so maybe the
//middle of your view. self.radius is the distance between this center point and the arc.
CGPathAddArc(arc,self.arcCenter.x,self.arcCenter.y,self.radius,arcStartAngle,arcEndAngle,YES);
//This essentially draws along the path in an arc shape
CGPathRef strokedArc = CGPathCreatecopyByStrokingPath(arc,5.0f,kCGLineCapButt,kCGLineJoinMiter,10);
CGContextSaveGState(context);
CGContextAddpath(context,strokedArc);
CGContextClip(context);
CGContextDrawLinearGradient(context,gradient,startPoint,endPoint,0);
CGContextDrawPath(context,kCGPathFillstroke);
CGGradientRelease(gradient);
CGContextRestoreGState(context);
//This all draws a gradient that is much larger than the arc itself,but using
//CGContextClip,it clips out everything EXCEPT the colors in the arc. Saving and Restoring
//the state allows you to preserve any other drawing going on. If you didn't use these,//then all other drawing would also be clipped.
我希望这有帮助.如果有任何不清楚的话,建议您查看上面的问题链接.这个问题的答案包含了我在这个答案中使用的一切,还有一些更酷和有用的绘图技巧.