CGContextAddArc用法

原文链接 http://differentisnotdifferent.diandian.com/post/2012-07-30/40032320467

CGContextAddArc(CGContextRef c, CGFloat x, CGFloat y, // 圆心(x,y)
CGFloat radius, // 半径
CGFloat startAngle, CGFloat endAngle, // 开始、结束弧度
int clockwise // 绘制方向,YES:逆时针;NO:顺时针
)

用法心得:

  1. 弧度 中心点右侧 弧度为 0 中心点下方 弧度为 M_PI_2 中心点左侧 弧度为 M_PI 中心点上方 弧度为 -M_PI_2
  2. 绘制x弧度圆 所谓x弧度圆,就是不满2π的圆弧。 比如 想画一个 缺口朝下&缺口弧度30度 的x弧度圆 选择逆时针画法: startAngle = M_PI_2 - (15/180M_PI); endAngle = M_PI_2 + (diff/180M_PI); clockwise = YES; 选择顺时针画法: startAngle = M_PI_2 + (15/180M_PI); endAngle = M_PI_2 - (diff/180M_PI); clockwise = NO;
  3. 链接文章中提到的图解(自己不会画图。。。) CGContextAddArc(context, 160, 200, 100, 0, 45*(M_PI/180), 0); 所以对上面这对代码的解释是这样的:
    1)startAngle为0,绿色箭头的地方。
    2)endAngle为45,黄色箭头的地方。
    3)clockwise为0,按照红色箭头往下绘制图形。
    4)所以效果就是红色的扇形。 补充:如果clockwise为1,则是蓝色部分区域。
CGContextAddArc用法 - 自助者天助之 - 冰冻三尺,非一日之寒

本人注:clockwise为1应该是顺时针方向,为0是逆时针方向

*clockwise

Specify 1 to create a clockwise arc or 0 to create a counterclockwise arc.




CGContextAddArc的使用

这个函数让我在纸上画了半天才搞明白,把我的理解给大家分享下。
void CGContextAddArc(CGContextRef c, CGFloat x, CGFloat y, CGFloat radius, CGFloat startAngle, CGFloat endAngle, int clockwise)
CGContextRef不解释了,x,y为圆点坐标,startAngle为开始的弧度,endAngle为 结束的弧度,clockwise 0为顺时针,1为逆时针。
CGContextAddArc(context, 160, 200, 100, 0, 45*(M_PI/180), 0);
所以对上面这对代码的解释是这样的:
1)startAngle为0,绿色箭头的地方。
2)endAngle为45,黄色箭头的地方。
3)clockwise为0,按照红色箭头往下绘制图形。
4)所以效果就是红色的扇形。
补充:如果clockwise为1,则是蓝色部分区域。


CGContextAddArc的使用
CGContextAddArc的使用

例子-----------------------------------------(画一个圆环--大圆环套小圆环)

#define ToRadian(radian)            (radian*(M_PI/180.0))
-(void)drawRect:(CGRect)rect{
    [super drawRect:rect];
//大圆环------------    
    CGContextRef ctx = UIGraphicsGetCurrentContext();
    CGContextAddArc(ctx, self.frame.size.width/2, self.frame.size.height/2,radius,ToRadian(45), ToRadian(135), 0);
    [self.backgurondWithGaugeColor setStroke];//圆环的颜色
    CGContextSetLineWidth(ctx, 40);//大圆环的圆环粗细为40
    CGContextSetLineCap(ctx, kCGLineCapButt);
    CGContextDrawPath(ctx, kCGPathStroke);
    

    //小圆环(和大圆环类似)------------  
    CGContextAddArc(ctx, self.frame.size.width/2, self.frame.size.height/2, radius-5,ToRadian(45), 135*(M_PI/180.0), 0);

    [self.progressColor setStroke];
    CGContextSetLineWidth(ctx, 30);
    CGContextSetLineCap(ctx, kCGLineCapButt);
    CGContextDrawPath(ctx, kCGPathStroke);
    
    
    needleView.transform = CGAffineTransformMakeRotation(ToRadian((drawScale*TotalAangle+45)));
 
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容