深入理解UIBezierPath畫圓弧addArcWithCenter


UIBezierPath畫圓弧的方法

- (void)addArcWithCenter:(CGPoint)center radius:(CGFloat)radius startAngle:(CGFloat)startAngle endAngle:(CGFloat)endAngle clockwise:(BOOL)clockwise NS_AVAILABLE_IOS(4_0);

方法中各參數(shù)的意義:

  • center 圓心的坐標(biāo)
  • radius 圓的半徑
  • startAngle 起始的弧度
  • endAngle:結(jié)束的弧度
  • clockwise:YES為順時(shí)針,No為逆時(shí)針

以上五個(gè)參數(shù),除了startAngle、endAngle會不清楚怎么設(shè)置,其他都比較容易理解,下面我們針對這兩個(gè)參數(shù)做一些講解,如果有其他三個(gè)參數(shù)不太清楚的,可以聯(lián)系我,不過應(yīng)該沒有吧,= =

如何設(shè)置startAngle、endAngle

1.startAngle、endAngle是弧度,不是角度(知道的直接跳到2)

iOS提供以下幾種表示方式:

// 一個(gè)半圓的弧度,即180°
#define M_PI        3.14159265358979323846264338327950288   /* pi             */
// 90°
#define M_PI_2      1.57079632679489661923132169163975144   /* pi/2           */
// 45°
#define M_PI_4      0.785398163397448309615660845819875721  /* pi/4           */

用上面提供的宏表示任何度數(shù)綽綽有余,比如表示135°:
0.75 * M_PI
或者1.5 * M_PI_2
....

2.弧度的起點(diǎn),僅針對這個(gè)API
3.弧度的表示

從0°的點(diǎn)開始順時(shí)針數(shù)算是正方向的角度,用正數(shù)表示
從0°的點(diǎn)開始逆時(shí)針數(shù)算是反方向的角度,用負(fù)數(shù)表示
所以,在圓上的一個(gè)角度,可以同時(shí)有兩種表示方法,順時(shí)針方向數(shù)一種,逆時(shí)針方向數(shù)一種,講到這里先別慌,我們現(xiàn)在只要知道怎么在圓上表示一個(gè)弧度就行。

不管怎么表示,我們只要知道這個(gè)弧度在圓的什么位置上
4.如何設(shè)置startAngle、endAngle

舉個(gè)栗子,我現(xiàn)在要用UIBezierPath畫一個(gè)如下圖所示的圖形:

要繪制的圖形

分析步驟如下:
4.1 確定center、radius
4.2 確定弧度的起點(diǎn)、弧度的終點(diǎn)

弧度的起點(diǎn)、終點(diǎn)

4.3 用弧度表示弧度的起點(diǎn)、弧度的終點(diǎn)
即用startAngleendAngle表示弧度的起點(diǎn)、弧度的終點(diǎn)
弧度的起點(diǎn) - startAngle: 0.25 * M_PI 或 -1.75 * M_PI
弧度的終點(diǎn) - endAngle: 0.5 * M_PI 或 -1.5 * M_PI

4.4 確定clockwise,這一步是決定你的弧長怎么樣的關(guān)鍵
如果設(shè)為YES,圓弧會從弧度的起點(diǎn)沿著順時(shí)針方向畫弧,遇到弧度的終點(diǎn)停止,結(jié)果如下:

順時(shí)針

如果設(shè)為NO,圓弧會從弧度的起點(diǎn)沿著逆時(shí)針方向畫弧,遇到弧度的終點(diǎn)停止,結(jié)果如下:

逆時(shí)針

所以startAngle、endAngle只是表示出起點(diǎn)和終點(diǎn),至于線會怎么畫,決定于clockwise。

下面附上源碼:

    CGPoint line_start = CGPointMake(0, 30);
    CGPoint line_end = CGPointMake(100, 30);
    CGPoint circle_center = CGPointMake(85, 15);
    
    UIBezierPath *path = [UIBezierPath bezierPath];
    [path moveToPoint:line_start];
    [path addLineToPoint:line_end];
    
    // 注意線畫到這里其實(shí)只畫了一條直線,但是調(diào)用addArcWithCenter方法路徑會自動連線到圓弧的起點(diǎn)
    [path addArcWithCenter:circle_center radius:10 startAngle:0.25 * M_PI endAngle:- 1.5 * M_PI clockwise:NO];
    
    CAShapeLayer *shapeLayer=[CAShapeLayer layer];
    shapeLayer.path = path.CGPath;
    shapeLayer.fillColor = [UIColor clearColor].CGColor;//填充顏色
    shapeLayer.strokeColor = [UIColor blackColor].CGColor;//邊框顏色
    shapeLayer.lineCap = @"round";
    [self.layer addSublayer:shapeLayer];

效果如下:

IMG_3129.PNG

總結(jié)

<p>

花了一上午才寫完,不知道寫的清不清楚,希望對你能有幫助,另外記得順手點(diǎn)贊~

致謝

http://www.bubuko.com/infodetail-1031393.html

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容