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=逆时针));

 

 

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

 

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

 

示例代码:

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

[plain] view plaincopy
  1. CGContextRef context=UIGraphicsGetCurrentContext();  
  2. CGContextSetRGBStrokeColor(context,1,0,0,1);  
  3. CGContextMoveToPoint(context,150,50);  
  4. CGContextAddLineToPoint(context,100,80);  
  5. CGContextAddLineToPoint(context,130,150);  
  6.   
  7. CGContextMoveToPoint(context,150,50);//圆弧的起始点  
  8. CGContextAddArcToPoint(context,100,80,130,150,50);  
  9. CGContextStrokePath(context);  

CGContextMoveToPoint(context,150,50);//圆弧的起始点

CGContextAddArcToPoint(context,100,80,130,150,50);

是说从(15050)到(10080)画一条线,然后再从(10080)到(130150)画一条线,从这两条线(无限延伸的) 和半径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);



0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 猫吃了酸性植物怎么办 金鱼在缸底不动怎么办 野兔子不吃不喝怎么办 让荷兰猪咬了怎么办 仓鼠的脚被棉花怎么办 仓鼠的脚变黑了怎么办 夏天小仓鼠生了怎么办 把仓鼠摔出血了怎么办 仓鼠摔成骨折了怎么办 孩子被仓鼠咬了怎么办 仓鼠不咬磨牙石怎么办 仓鼠妈妈跑了宝宝怎么办 买的仓鼠繁殖了怎么办 仓鼠没有鼠粮了怎么办 仓鼠被踩吐血了怎么办? 买的蓝莓太酸怎么办 荷兰猪夏天掉毛怎么办 被猫抓伤肿了怎么办 荷兰猪鼻子破了怎么办 荷兰猪吃了包菜怎么办 龙猫不爱吃主粮怎么办 荷兰猪躲起来了怎么办 荷兰猪一直叫是怎么办 龙猫不吃粗的主粮怎么办 转龙猫中暑症状+龙猫中暑怎么办 火车上空调太冷怎么办 格力空调太冷怎么办 未满月龙猫宝宝怎么办 房间小空调太冷怎么办 奶猫半夜不睡觉怎么办 龙猫不喜欢吃草粒怎么办 龙猫一直在发抖怎么办 龙猫牙齿掉了怎么办 龙猫晚上很吵怎么办 小狗把手咬破了怎么办 夏天仓鼠太热了怎么办 仓鼠玩转轮会摔怎么办 如何发截图不会发现吐怎么办 嘴巴烂了药过敏怎么办 非法校车被扣了怎么办 手指削掉一块肉怎么办