UIBezierPath 類的使用

使用UIBezierPath類能夠建立基於矢量的路徑,這個類在UIKit中。此類是Core Graphics框架關於path的一個封裝。使用此類能夠定義簡單的形狀,如橢圓或者矩形,或者有多個直線和曲線段組成的形狀。
UIBezierPath對象是CGPathRef數據類型的封裝。path若是是基於矢量形狀的,都用直線和曲線段去建立。咱們使用直線段去建立矩形和多邊形,使用曲線段去建立弧(arc),圓或者其餘複雜的曲線形狀。每一段都包括一個或者多個點,繪圖命令定義如何去詮釋這些點。每個直線段或者曲線段的結束的地方是下一個的開始的地方。每個鏈接的直線或者曲線段的集合成爲subpath。一個UIBezierPath對象定義一個完整的路徑包括一個或者多個subpaths。git

 + (instancetype)bezierPath;//建立一個基本路徑
 + (instancetype)bezierPathWithRect:(CGRect)rect;// 矩形
 + (instancetype)bezierPathWithOvalInRect:(CGRect)rect;// 橢圓
 + (instancetype)bezierPathWithRoundedRect:(CGRect)rect cornerRadius:(CGFloat)cornerRadius; // 帶圓角度的矩形
 + (instancetype)bezierPathWithRoundedRect:(CGRect)rect byRoundingCorners:(UIRectCorner)corners cornerRadii:(CGSize)cornerRadii;// 帶指定方向圓角度的矩形
 + (instancetype)bezierPathWithArcCenter:(CGPoint)center radius:(CGFloat)radius startAngle:(CGFloat)startAngle endAngle:(CGFloat)endAngle clockwise:(BOOL)clockwise;// 弧線,
 /*
         center: 圓弧中心
         radius: 圓弧半徑
         startAngle: 起點的角度(相對角度座標系 0)
         endAngle: 結束點的角度(相對角度座標系 0)
         clockwise: 是否順時針方向
         */

 + (instancetype)bezierPathWithCGPath:(CGPathRef)CGPath; //經過 CGPath建立

 - (void)moveToPoint:(CGPoint)point; // 設置線段的起點
 // add*系列--定義一個或多個subpaths
 - (void)addLineToPoint:(CGPoint)point;// 添加直線
 - (void)addArcWithCenter:(CGPoint)center radius:(CGFloat)radius startAngle:(CGFloat)startAngle endAngle:(CGFloat)endAngle clockwise:(BOOL)clockwise NS_AVAILABLE_IOS(4_0);// 添加弧線
 - (void)addQuadCurveToPoint:(CGPoint)endPoint controlPoint:(CGPoint)controlPoint;// 添加二次貝塞爾曲線
 - (void)addCurveToPoint:(CGPoint)endPoint controlPoint1:(CGPoint)controlPoint1 controlPoint2:(CGPoint)controlPoint2; // 添加三次貝塞爾曲線

 // 繪製
 - (void)fill;// 線條區域顏色填充
 - (void)stroke;// 線條顏色繪製
 - (void)closePath; // 結束一個圖形的subpath,也會鏈接最後一個點與初始點之間的直線
- (void)removeAllPoints; //移除全部的點,刪除全部的subPath
- (void)appendPath:(UIBezierPath *)bezierPath; // 將bezierPath添加到當前path

建立和使用一個UIBezierPath大概分爲四步驟:
(1)建立一個Bezier path對象。
(2)使用方法moveToPoint:去設置初始線段的起點。
(3)添加line或者curve去定義一個或者多個subpaths。
(4)改變UIBezierPath對象跟繪圖相關的屬性。github

 CAShapeLayer 介紹app

   - 簡單介紹:
     CAShapeLayer繼承自CALayer,所以,可以使用CALayer的全部屬性。可是,CAShapeLayer須要和貝塞爾曲線配合使用纔有意義。

     #CAShapeLayer和drawRect的比較
     - 1.drawRect:屬於CoreGraphics框架,佔用CPU,性能消耗大
     - 2.CAShapeLayer:屬於CoreAnimation框架,經過GPU來渲染圖形,節省性能。動畫渲染直接提交給手機GPU,不消耗內存

CAShapeLayer與UIBezierPath的關係框架

- 1.CAShapeLayer中shape表明形狀的意思,因此須要形狀才能生效
- 2.貝塞爾曲線能夠建立基於矢量的路徑,而UIBezierPath類是對CGPathRef的封裝
- 3.貝塞爾曲線給CAShapeLayer提供路徑,CAShapeLayer在提供的路徑中進行渲染。路徑會閉環,因此繪製出了Shape
- 4.用於CAShapeLayer的貝塞爾曲線做爲path,其path是一個首尾相接的閉環的曲線,即便該貝塞爾曲線不是一個閉環的曲線

代碼具體的使用請參考 demo :https://github.com/SummerHH/BezierPath.git性能

 效果圖:學習

 

參考:動畫

http://www.jianshu.com/p/b1c38a3a67a9 iOS - 關於貝塞爾曲線與CAShapeLayer的學習
 [UIBezierPath類 介紹](http://blog.csdn.net/crayondeng/article/details/11093689)
相關文章
相關標籤/搜索