我知道如何画一个弧
我还发现如何从 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.
我希望这有帮助.如果有任何不清楚的话,建议您查看上面的问题链接.这个问题的答案包含了我在这个答案中使用的一切,还有一些更酷和有用的绘图技巧.