转自   http://stephen830.iteye.com/blog/1489616

 

 

 

iphone画圆弧或扇形

 

 

核心函数:

 

CGContextAddArc

 

Adds an arc of a circle to the current path, possibly preceded by a straight line segment

void CGContextAddArc (
   CGContextRef c, //图形上下文
   CGFloat x,//圆心x坐标
   CGFloat y,//圆心y坐标
   CGFloat radius,//圆半径
   CGFloat startAngle,//开始的弧度
   CGFloat endAngle,//结束的弧度
   int clockwise //画的方向(1=顺时针,0=逆时针)
);

 

 

关于角度与弧度的转换关系代码:

 

 

Cpp代码  收藏代码
  1. #define PI 3.14159265358979323846  
  2. static inline float radians(double degrees) { return degrees * PI / 180; }  

 

 

示例代码:

Cpp代码  收藏代码
  1. CGContextRef  context = UIGraphicsGetCurrentContext();

  2.  
  3. //设置矩形填充颜色:红色    
  4. CGContextSetRGBFillColor(context, 1.0, 0.0, 0.0, 1.0);    
  5. //设置画笔颜色:黑色    
  6. CGContextSetRGBStrokeColor(context, 0, 0, 0, 1);    
  7. //设置画笔线条粗细    
  8. CGContextSetLineWidth(context, 0.6);    
  9.   
  10. //扇形参数    
  11. double radius=40;//半径    
  12. int startX=50;//圆心x坐标    
  13. int startY=50;//圆心y坐标    
  14. double pieStart=0;//起始的角度    
  15. double pieCapacity=60;//角度增量值    
  16. int clockwise=0;//0=逆时针,1=顺时针    
  17.   
  18. //逆时针画扇形    
  19. CGContextMoveToPoint(context, startX, startY);    
  20. CGContextAddArc(context, startX, startY, radius, radians(pieStart), radians(pieStart+pieCapacity), clockwise);    
  21. CGContextClosePath(context);    
  22. CGContextDrawPath(context, kCGPathEOFillStroke);    
  23.   
  24. //扇形参数    
  25. startX=150;//圆心x坐标    
  26. startY=50;//圆心y坐标    
  27. pieStart=0;//起始的角度    
  28. pieCapacity=60;//角度增量值    
  29. clockwise=1;//0=逆时针,1=顺时针    
  30.   
  31. //顺时针画扇形    
  32. CGContextMoveToPoint(context, startX, startY);    
  33. CGContextAddArc(context, startX, startY, radius, radians(pieStart), radians(pieStart+pieCapacity), clockwise);    
  34. CGContextClosePath(context);    
  35. CGContextDrawPath(context, kCGPathEOFillStroke);   

 

 


  

 

图中:

(1)为逆时针画扇形:角度0°-60°

(2)为顺时针画扇形:角度0°-60°

 

 

关于角度的定义:(参见下图)

 



 红点为圆心,圆心右边绿线表示的角度为0°,往下绕红心顺时针开始依次为1°、2°、3°、...、360°。