转自 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=逆时针) );
关于角度与弧度的转换关系代码:
- #define PI 3.14159265358979323846
- static inline float radians(double degrees) { return degrees * PI / 180; }
示例代码:
-
CGContextRef context = UIGraphicsGetCurrentContext();
- //设置矩形填充颜色:红色
- CGContextSetRGBFillColor(context, 1.0, 0.0, 0.0, 1.0);
- //设置画笔颜色:黑色
- CGContextSetRGBStrokeColor(context, 0, 0, 0, 1);
- //设置画笔线条粗细
- CGContextSetLineWidth(context, 0.6);
- //扇形参数
- double radius=40;//半径
- int startX=50;//圆心x坐标
- int startY=50;//圆心y坐标
- double pieStart=0;//起始的角度
- double pieCapacity=60;//角度增量值
- int clockwise=0;//0=逆时针,1=顺时针
- //逆时针画扇形
- CGContextMoveToPoint(context, startX, startY);
- CGContextAddArc(context, startX, startY, radius, radians(pieStart), radians(pieStart+pieCapacity), clockwise);
- CGContextClosePath(context);
- CGContextDrawPath(context, kCGPathEOFillStroke);
- //扇形参数
- startX=150;//圆心x坐标
- startY=50;//圆心y坐标
- pieStart=0;//起始的角度
- pieCapacity=60;//角度增量值
- clockwise=1;//0=逆时针,1=顺时针
- //顺时针画扇形
- CGContextMoveToPoint(context, startX, startY);
- CGContextAddArc(context, startX, startY, radius, radians(pieStart), radians(pieStart+pieCapacity), clockwise);
- CGContextClosePath(context);
- CGContextDrawPath(context, kCGPathEOFillStroke);
图中:
(1)为逆时针画扇形:角度0°-60°
(2)为顺时针画扇形:角度0°-60°
关于角度的定义:(参见下图)
红点为圆心,圆心右边绿线表示的角度为0°,往下绕红心顺时针开始依次为1°、2°、3°、...、360°。
转载于:https://blog.51cto.com/scxixi/971735