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,則是藍色部分區(qū)域。
CGContextAddArc用法 - 自助者天助之 - 冰凍三尺,非一日之寒

本人注:clockwise為1應該是順時針方向,為0是逆時針方向

*clockwise

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

??
???
?

?

CGContextAddArc的使用

這個函數(shù)讓我在紙上畫了半天才搞明白,把我的理解給大家分享下。
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,則是藍色部分區(qū)域。


CGContextAddArc的使用
CGContextAddArc的使用

例子-----------------------------------------(畫一個圓環(huán)--大圓環(huán)套小圓環(huán))

#define ToRadian(radian)            (radian*(M_PI/180.0))
-(void)drawRect:(CGRect)rect{
    [super drawRect:rect];
//大圓環(huán)------------    
    CGContextRef ctx = UIGraphicsGetCurrentContext();
    CGContextAddArc(ctx, self.frame.size.width/2, self.frame.size.height/2,radius,ToRadian(45), ToRadian(135), 0);
    [self.backgurondWithGaugeColor setStroke];//圓環(huán)的顏色
    CGContextSetLineWidth(ctx, 40);//大圓環(huán)的圓環(huán)粗細為40
    CGContextSetLineCap(ctx, kCGLineCapButt);
    CGContextDrawPath(ctx, kCGPathStroke);
    

    //小圓環(huán)(和大圓環(huán)類似)------------  
    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)));
 
}
最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內(nèi)容