ios – 如何用Core Graphics / iPhone绘制渐变弧?

前端之家收集整理的这篇文章主要介绍了ios – 如何用Core Graphics / iPhone绘制渐变弧?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我知道如何画一个弧
我还发现如何从 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.

我希望这有帮助.如果有任何不清楚的话,建议您查看上面的问题链接.这个问题的答案包含了我在这个答案中使用的一切,还有一些更酷和有用的绘图技巧.

原文链接:https://www.f2er.com/iOS/335771.html

猜你在找的iOS相关文章