UIBezierPath畫圓弧的方法
- (void)addArcWithCenter:(CGPoint)center radius:(CGFloat)radius startAngle:(CGFloat)startAngle endAngle:(CGFloat)endAngle clockwise:(BOOL)clockwise NS_AVAILABLE_IOS(4_0);
方法中各參數(shù)的意義:
- center 圓心的坐標
- radius 圓的半徑
- startAngle 起始的弧度
- endAngle:結(jié)束的弧度
- clockwise:YES為順時針吟税,No為逆時針
以上五個參數(shù)优幸,除了startAngle
钧舌、endAngle
會不清楚怎么設(shè)置栋猖,其他都比較容易理解,下面我們針對這兩個參數(shù)做一些講解,如果有其他三個參數(shù)不太清楚的,可以聯(lián)系我火惊,不過應(yīng)該沒有吧,= =
如何設(shè)置startAngle奔垦、endAngle
1.startAngle
屹耐、endAngle
是弧度,不是角度(知道的直接跳到2)
iOS提供以下幾種表示方式:
// 一個半圓的弧度椿猎,即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.弧度的起點,僅針對這個API
3.弧度的表示
從0°的點開始順時針數(shù)算是正方向的角度犯眠,用正數(shù)表示
從0°的點開始逆時針數(shù)算是反方向的角度俗他,用負數(shù)表示
所以,在圓上的一個角度阔逼,可以同時有兩種表示方法,順時針方向數(shù)一種地沮,逆時針方向數(shù)一種嗜浮,講到這里先別慌,我們現(xiàn)在只要知道怎么在圓上表示一個弧度就行摩疑。
4.如何設(shè)置startAngle
、endAngle
舉個栗子雷袋,我現(xiàn)在要用UIBezierPath畫一個如下圖所示的圖形:
分析步驟如下:
4.1 確定
center
吉殃、radius
4.2 確定弧度的起點、弧度的終點
4.3 用弧度表示弧度的起點蛋勺、弧度的終點
即用
startAngle
、endAngle
表示弧度的起點鸠删、弧度的終點弧度的起點 -
startAngle
: 0.25 * M_PI 或 -1.75 * M_PI弧度的終點 -
endAngle
: 0.5 * M_PI 或 -1.5 * M_PI
4.4 確定clockwise
抱完,這一步是決定你的弧長怎么樣的關(guān)鍵
如果設(shè)為YES,圓弧會從弧度的起點沿著順時針方向畫弧刃泡,遇到弧度的終點停止巧娱,結(jié)果如下:
如果設(shè)為NO,圓弧會從弧度的起點沿著逆時針方向畫弧烘贴,遇到弧度的終點停止禁添,結(jié)果如下:
所以startAngle
、endAngle
只是表示出起點和終點桨踪,至于線會怎么畫老翘,決定于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];
// 注意線畫到這里其實只畫了一條直線,但是調(diào)用addArcWithCenter方法路徑會自動連線到圓弧的起點
[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];
效果如下:
總結(jié)
<p>
花了一上午才寫完酪捡,不知道寫的清不清楚叁征,希望對你能有幫助,另外記得順手點贊~