最近在開發中接觸到了UIBezierPath和Core Graphics相關的知識,來繪制一些指定的圖形樣式,從而對二者做了一些簡單的了解和淺顯的使用記錄.
1:UIBezierPath
- 介紹
- UIBezierPath屬于UIKit框架,繼承與NSObject基類。它允許開發者在自定義的視圖中使用直線,曲線等線段的組合定義好自己的路徑并且渲染繪制出路徑組合的圖形,這些圖形可以是簡單的矩形,圓形,橢圓形,弧形等,也可以是直線、曲線等線條組合而成的復雜的幾何圖形。一旦使用路徑定義好幾何形狀,就可以使用類的渲染方法在當前的上下文繪將其渲染出來
- UIBezierPath主要用來繪制矢量圖形,它是基于Core Graphics對CGPathRef數據類型和path繪圖屬性的一個封裝,所以是需要圖形上下文的(CGContextRef),所以一般UIBezierPath在drawRect中使用。
2: 使用
- 路徑的創建:即創建一個UIBezierPath對象
-
+(instancetype)bezierPath
創建一個空的UIBeizierPath對象; -
+ (instancetype)bezierPathWithRect:(CGRect)rect
這個方法會創建一個以rect的原點作為起點,順時針添加線條組成的封閉子路徑,并以此矩形創建一個UIBeizierPath對象; -
+ (instancetype)bezierPathWithOvalInRect:(CGRect)rect
這個方法會在順時針方向(相對于坐標系統)上使用一串貝塞爾曲線去繪制一個近似橢圓的封閉子路徑(如果rect參數確定為正方形,則內切的路徑是個圓形),并使用此路徑創建一個UIBeizierPath對象; -
+ (instancetype)bezierPathWithRoundedRect:(CGRect)rect cornerRadius:(CGFloat)cornerRadius
使用圓角的(順時針封閉)矩形路徑創建一個UIBeizierPath對象;*
rect-定義基礎的矩形路徑,
cornerRadius-定義矩形每個角的弧度,0代表沒有弧度* -
+ (instancetype)bezierPathWithRoundedRect:(CGRect)rect byRoundingCorners:(UIRectCorner)corners cornerRadii:(CGSize)cornerRadii
使用指定部分圓角的(順時針封閉)矩形路徑創建一個UIBeizierPath對象,*
rect-定義基礎的矩形路徑,
corners-定義矩形那個角可以弧度化,可弧度化的尺寸* -
+ (instancetype)bezierPathWithArcCenter:(CGPoint)center radius:(CGFloat)radius startAngle:(CGFloat)startAngle endAngle:(CGFloat)endAngle clockwise:(BOOL)clockwise
使用指定開放的圓弧路徑
創建一個UIBeizierPath對象。*
center-圓弧對應的中心原點
radius-圓弧的半徑
startAngle-弧度開始的角度
endAngle-弧度結束的角度
clockwise-是否順時針方向 + (instancetype)bezierPathWithCGPath:(CGPathRef)CGPath
- 配置UIBeizierPath對象屬性
- 使用
- (void)moveToPoint:(CGPoint)point;
初始化路徑原點 - 使用
- (void)addLineToPoint:(CGPoint)point 、addArcWithCenter:radius:startAngle:endAngle:clockwise:
等添加線段,定義一或多個子路徑 - 修改 UIBezierPath 的繪圖相關的屬性,比如
stroke path的屬性 lineWidth 和 lineJoinStyle ,filled path的屬性 usesEvenOddFillRule
- 進行圖形的渲染繪制,使用
strok
和fill