iosLearingDiary_CGContextAddArc
来源:互联网 发布:淘宝怎么买百度云账号 编辑:程序博客网 时间:2024/06/06 00:05
核心函数:
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; }
示例代码:
- //设置矩形填充颜色:红色
- 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°。
/**画弧线CGContextAddArc*/
/**1根据beginAngel和 endAngle定好起点和终点。2从终点开始,逆时针沿着指定的半径和圆点,向起点画。3画完后currentpoint是停在Endangle所在的点*/
CGFloat beginAngle = 0;
CGFloat endAngle = M_PI/2.0;
BOOL closeWise = false;
CGContextAddArc(context, 120, 100, 30, beginAngle, endAngle, closeWise);
CGContextStrokePath(context);
CGFloat beginAngle2 = 0;
CGFloat endAngle2 = M_PI/2.0;
BOOL closeWise2 = false;
CGContextAddArc(context, 200, 100, 30, beginAngle2, endAngle2, closeWise2);
CGContextStrokePath(context);
/*画两条一起的弧线*/
/**两条弧线一起画,那么第一条弧线的endAngle所对应的点e1,和第二条弧线所在的startAngle对应的点s2,若不在同一点,将连成一条直线*/
CGContextAddArc(context, 120, 180, 30, M_PI/2.0, M_PI, false);
CGContextAddArc(context, 120, 180, 30, M_PI*3/2.0, 0, false);
CGContextStrokePath(context);
CGContextAddArcToPoint
- CGContextRef context=UIGraphicsGetCurrentContext();
- CGContextSetRGBStrokeColor(context,1,0,0,1);
- CGContextMoveToPoint(context,150,50);
- CGContextAddLineToPoint(context,100,80);
- CGContextAddLineToPoint(context,130,150);
- CGContextMoveToPoint(context,150,50);//圆弧的起始点
- CGContextAddArcToPoint(context,100,80,130,150,50);
- CGContextStrokePath(context);
CGContextMoveToPoint(context,150,50);//圆弧的起始点
CGContextAddArcToPoint(context,100,80,130,150,50);
是说从(150,50)到(100,80)画一条线,然后再从(100,80)到(130,150)画一条线,从这两条线(无限延伸的) 和半径50可以确定一条弧.
注意:
1,圆弧与两条切线相交的点是切点。
2,假设起始点为s,第一条切线与圆弧相交的点为p1,若s与p1不为同一点,那么s点到p1点的直线也会被画出。
/**带弧角的rectanglar,CGContextAddArcToPoint*/
CGRect rrect =CGRectMake(150,300,100,120);
CGFloat radius = 20;
CGFloat minx = CGRectGetMinX(rrect);
CGFloat midx = CGRectGetMidX(rrect);
CGFloat maxx = CGRectGetMaxX(rrect);
CGFloat miny = CGRectGetMinY(rrect);
CGFloat midy = CGRectGetMidY(rrect);
CGFloat maxy = CGRectGetMaxY(rrect);
CGContextMoveToPoint(context, midx, miny);
CGContextAddArcToPoint(context, maxx, miny, maxx, midy, radius);
CGContextAddArcToPoint(context, maxx, maxy, midx, maxy, radius);
CGContextAddArcToPoint(context, minx, maxy, minx, midy, radius);
CGContextAddArcToPoint(context, minx, miny, midx, miny, radius);
CGContextClosePath(context);
CGContextDrawPath(context,kCGPathFillStroke);
- iosLearingDiary_CGContextAddArc
- Struts2自定义Action,自定义方法,DMI(动态方法调用),路径问题
- HDU 4597 Play Game
- 黑马程序员_Json学习笔记整理
- python基础教程_学习笔记20:标准库:一些最爱——os
- No Session found for current thread
- iosLearingDiary_CGContextAddArc
- android XMPP 开发总结(一)开发环境
- UVa 127 - "Accordian" Patience POJ 1214 链表题解
- fastjson 介绍
- http://www.xiachufang.com/cook/101814661/
- 黑马程序员-继承,组合,super,多态
- C++ 经典开源代码
- [LeetCode] Merge Intervals
- fedora20如何开机自启动用户的图形窗口程序