UIBezierPath

一個由直線和曲線線段組成的路徑,可以在自定義視圖中呈現(xiàn),UIKit中的UIBezierPath是Core Graphics框架關(guān)于path的一個封裝。可以創(chuàng)建基于矢量的路徑,例如橢圓或者矩形,或者有多個直線和曲線段組成的形狀

  • 創(chuàng)建一個UIBezierPath對象

  • bezierPath

1.創(chuàng)建并返回一個新的UIBezierPath對象

  • bezierPathWithRect:

1.以矩形路徑初始化創(chuàng)建并返回一個新的UIBezierPath對象

   //畫矩形
    UIBezierPath * recPath=[UIBezierPath bezierPathWithRect:CGRectMake(10, 50, 50, 50)];
    //線的寬度
    recPath.lineWidth=3;
    
    [recPath fill];
  • bezierPathWithOvalInRect:

1.以橢圓路徑初始化創(chuàng)建并返回一個新的UIBezierPath對象

UIBezierPath * ovalPath =[UIBezierPath bezierPathWithOvalInRect:CGRectMake(10, 130, 80, 50)];
    [ovalPath stroke];
  • bezierPathWithRoundedRect:cornerRadius:

1.以圓角矩形路徑初始化創(chuàng)建并返回一個新的UIBezierPath對象

UIBezierPath * recRoundPath=[UIBezierPath bezierPathWithRoundedRect:CGRectMake(10, 200, 80, 50) cornerRadius:10];
    [recRoundPath stroke];
  • bezierPathWithRoundedRect:byRoundingCorners:cornerRadii:

1.以可選哪個角為圓角矩形路徑初始化創(chuàng)建并返回一個新的UIBezierPath對象

 UIBezierPath * recRoundCorPath=[UIBezierPath bezierPathWithRoundedRect:CGRectMake(10, 270, 80, 50) byRoundingCorners:UIRectCornerTopLeft|UIRectCornerBottomRight cornerRadii:CGSizeMake(20, 20)];
    [recRoundCorPath stroke];
  • bezierPathWithArcCenter:radius:startAngle:endAngle:clockwise:

1.以圓弧路徑初始化創(chuàng)建并返回一個新的UIBezierPath對象

/*
     // 參數(shù)一: 圓弧圓心
     // 參數(shù)二: 圓弧半徑
     // 參數(shù)三: 開始弧度
     // 參數(shù)四: 結(jié)束弧度
     // 參數(shù)五: 是否為順時針
     */
    UIBezierPath * arcPath=[UIBezierPath bezierPathWithArcCenter:CGPointMake(80, 390) radius:60 startAngle:0 endAngle:M_PI/2 clockwise:NO];
    [arcPath fill];
  • bezierPathWithCGPath:

1.以Core Graphics path的路徑為參數(shù)創(chuàng)建并返回一個新的UIBezierPath對象

  • bezierPathByReversingPath

1.使用當(dāng)前路徑的反向內(nèi)容創(chuàng)建和返回一個新的貝塞爾路徑對象

  • 構(gòu)建路徑

  • moveToPoint:

1.將當(dāng)前點移動到指定的位置

  • addLineToPoint:

1.從當(dāng)前點增加一條直線到指定點

UIBezierPath * linePath = [UIBezierPath bezierPath];
[linePath moveToPoint:CGPointMake(100, 10)]; [linePath addLineToPoint:CGPointMake(150, 100)];
[linePath stroke];
  • addArcWithCenter:radius:startAngle:endAngle:clockwise:

1.在路徑中增加一條圓弧

UIBezierPath * addArcPath =[UIBezierPath bezierPath];
    [addArcPath moveToPoint:CGPointMake(170, 300)];
    [addArcPath addLineToPoint:CGPointMake(300, 300)];
    [addArcPath addArcWithCenter:CGPointMake(235, 350) radius:40 startAngle:0 endAngle:M_PI clockwise:YES];
    [addArcPath stroke];
  • addQuadCurveToPoint:controlPoint:

1.在路徑中增加一條二次貝塞爾曲線


WechatIMG418.jpeg
UIBezierPath *bezierpath1 = [UIBezierPath bezierPath];
    [bezierpath1 moveToPoint:CGPointMake(200, 500)];
    // 參數(shù)一: 曲線的終點位置
    // 參數(shù)二: 控制點
    [bezierpath1 addQuadCurveToPoint:CGPointMake(300, 500) controlPoint:CGPointMake(210, 400)];
    
    [bezierpath1 stroke];
  • addCurveToPoint:controlPoint1:controlPoint2:

在路徑中增加一條三次貝塞爾曲線


WechatIMG413.jpeg
UIBezierPath *bezierpath2 = [UIBezierPath bezierPath];
    [bezierpath2 moveToPoint:CGPointMake(50, 640)];
    // 參數(shù)一: 曲線的終點位置
    // 參數(shù)二: 控制點1
    //參數(shù)三:控制點2
    
    //[bezierpath1 addQuadCurveToPoint:CGPointMake(300, 500) controlPoint:CGPointMake(210, 400)];
    [bezierpath2 addCurveToPoint:CGPointMake(450, 640) controlPoint1:CGPointMake(120, 410) controlPoint2:CGPointMake(300, 530)];
    [bezierpath2 stroke];
  • closePath

closePath方法不僅結(jié)束一個shape的subpath表述,它也在最后一個點和第一個點之間畫一條線段,如果我們畫多邊形的話,這個一個便利的方法我們不需要去畫最后一條線。

  • removeAllPoints

移除這個UIBezierPath對象路徑中所有的點

  • appendPath:

在路徑中增加一個已有UIBezierPath路徑

  • CGPath

Core Graphics 的路徑表示

  • currentPoint

圖形路徑中的當(dāng)前點。

  • 訪問圖形屬性

  • lineWidth

線寬定義接收器的被觸摸路徑的厚度。0的寬度被解釋為可以在特定設(shè)備上呈現(xiàn)的最薄的行。實際繪制的線寬可能與指定的寬度相差多達(dá)2個設(shè)備像素,這取決于線相對于像素網(wǎng)格和當(dāng)前反鋸齒設(shè)置的位置。行的寬度也可能受到活動圖形上下文當(dāng)前轉(zhuǎn)換矩陣中指定的縮放因子的影響,默認(rèn)的值為1

  • lineCapStyle

路徑的終點形狀, 該屬性適用于開放路徑的起點和終點, 默認(rèn)為kCGLineCapButt(方形結(jié)束, 結(jié)束位置正好為精確位置), 其他可選項為kCGLineCapRound(圓形結(jié)束, 結(jié)束位置超過精確位置半個線寬)和kCGLineCapSquare(方形結(jié)束, 結(jié)束位置超過精確位置半個線寬)

  • lineJoinStyle

路徑的連接點形狀, 默認(rèn)為kCGLineJoinMiter(全部連接), 其他可選項為kCGLineJoinRound(圓形連接)和kCGLineJoinBevel(斜角連接)

  • flatness

平坦度值測量真實曲線上的點和繪制曲線上的點之間最大的允許距離(以像素為單位)。較小的值會導(dǎo)致更平滑的曲線,但需要更多的計算時間。較大的值會導(dǎo)致更多的鋸齒曲線,但渲染速度更快。默認(rèn)平面度值為0.6。
在大多數(shù)情況下,不應(yīng)改變平面度值。不過,您可能暫時增加平面度值,以最小化臨時繪制形狀所需的時間(例如在滾動過程中)

  • 繪制路徑

  • fill

利用當(dāng)前繪畫屬性填充路徑封閉范圍, 該方法在繪畫之前會自動將開放子路徑封閉, 填充部分不包含路徑本身, 所以對于線寬較大的路徑, 填充部分會跟部分路徑重合

  • fillWithBlendMode:alpha:

利用指定模式填充路徑封閉范圍, 該方法在繪畫之前會自動將開放子路徑封閉, 填充部分不包含路徑本身, 所以對于線寬較大的路徑, 填充部分會跟部分路徑重合

  • stroke

利用當(dāng)前繪畫屬性沿著路徑畫線

  • strokeWithBlendMode:alpha:

利用指定模式沿著路徑畫線

  • 裁剪路徑

  • addClip

沒怎么用過

  • Hit Detection

  • containsPoint:

返回一個布爾值,包含的區(qū)域是否包含指定的點

  • empty

是否路徑信息為空, 即使通過moveToPoint:移動到指定的位置也算不為空

  • bounds

可以封閉所有路徑點的最小矩形范圍, 包括多次貝塞爾曲線的控制點在內(nèi)

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

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

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