一委刘、UIBezierPath
的介紹
UIBezierPath
主要用來繪制矢量圖形,它是基于Core Graphics
對CGPathRef
數(shù)據(jù)類型和path
繪圖屬性的一個封裝鹰椒,所以是需要圖形上下文的CGContextRef
钱雷,所以一般UIBezierPath
在drawRect
中使用。
二吹零、UIBezierPath
的常用屬性
以下屬性是給已存在的path設(shè)置路徑屬性,如寬度拉庵,邊角類型灿椅,拐角類型等
- 1.
CGPath
:將UIBezierPath類轉(zhuǎn)換成CGPath,類似于UIColor的CGColor - 2.
currentPoint
:當前path的位置钞支,可以理解為path的終點 - 3.
lineWidth
:path寬度 - 4.
lineCapStyle
:path端點樣式枚舉茫蛹,有3種樣式
kCGLineCapButt, // 無端點
kCGLineCapRound, // 圓形端點
kCGLineCapSquare // 方形端點(樣式上和kCGLineCapButt是一樣的,但是比kCGLineCapButt長一點) - 5.
lineJoinStyle
:拐角樣式枚舉烁挟,有3種樣式
kCGLineJoinMiter, // 尖角
kCGLineJoinRound, // 圓角
kCGLineJoinBevel // 缺角 - 6.
miterLimit
:最大斜接長度(只有在使用kCGLineJoinMiter是才有效)婴洼, 邊角的角度越小,斜接長度就會越大撼嗓,為了避免斜接長度過長柬采,使用lineLimit屬性限制欢唾,如果斜接長度超過miterLimit,邊角就會以KCALineJoinBevel類型來顯示
三粉捻、UIBezierPath
構(gòu)建方法
以下類方法是創(chuàng)建一條
path
/** 僅僅初始化礁遣,需要用實例方法添加線 */
+ (instancetype)bezierPath;
/** 獲得矩形path */
+ (instancetype)bezierPathWithRect:(CGRect)rect;
/** 獲得圓形或橢圓path */
+ (instancetype)bezierPathWithOvalInRect:(CGRect)rect;
/** 獲得圓角矩形path,四周均圓角肩刃,想要某個角或者某些角圓角用下面的方法 */
+ (instancetype)bezierPathWithRoundedRect:(CGRect)rect
cornerRadius:(CGFloat)cornerRadius;
/** 獲得圓角矩形祟霍,是某些角圓角,UIRectCorner是枚舉類型 */
+ (instancetype)bezierPathWithRoundedRect:(CGRect)rect
byRoundingCorners:(UIRectCorner)corners
cornerRadii:(CGSize)cornerRadii;
/** 獲得圓弧形path */
+ (instancetype)bezierPathWithArcCenter:(CGPoint)center // 圓心
radius:(CGFloat)radius // 半徑
startAngle:(CGFloat)startAngle // 起始角
endAngle:(CGFloat)endAngle // 結(jié)束角
clockwise:(BOOL)clockwise; // 是否順時針
/** 用一條CGPath初始化 */
+ (instancetype)bezierPathWithCGPath:(CGPathRef)CGPath;
四盈包、UIBezierPath
實例方法
以下實例方法是給已創(chuàng)建的
path
添加路徑
/** 以某一點開始作為起點沸呐,一般用`+ (instancetype)bezierPath`創(chuàng)建的貝塞爾曲線,先用該方法標注一個起點呢燥,并調(diào)用其他的創(chuàng)建線條的方法來繪制曲線 */
- (void)moveToPoint:(CGPoint)point;
/** 從path的最后一點開始繪制一條線到目標點 */
- (void)addLineToPoint:(CGPoint)point;
/** 添加一條三次貝塞爾曲線 */
- (void)addCurveToPoint:(CGPoint)endPoint
controlPoint1:(CGPoint)controlPoint1
controlPoint2:(CGPoint)controlPoint2;
/** 添加一條二次貝塞爾曲線 */
- (void)addQuadCurveToPoint:(CGPoint)endPoint
controlPoint:(CGPoint)controlPoint;
/** 添加一條圓弧崭添,屬性定義和類方法中相同 */
- (void)addArcWithCenter:(CGPoint)center
radius:(CGFloat)radius
startAngle:(CGFloat)startAngle
endAngle:(CGFloat)endAngle
clockwise:(BOOL)clockwise NS_AVAILABLE_IOS(4_0);
/** 為path添加虛線,pattern數(shù)組存放各段虛線的長度疮茄,count是數(shù)組元素數(shù)量滥朱,phase是起始位置 */
- (void)setLineDash:(nullable const CGFloat *)pattern
count:(NSInteger)count
phase:(CGFloat)phase;
五、使用
- 在
drawRect
中直接繪制圖形的基本步驟
1.創(chuàng)建path
力试,用類方法創(chuàng)建
2.設(shè)置path
的屬性
3.為path
的邊緣stroke
設(shè)置顏色徙邻,為path的填充fill
設(shè)置顏色,在需要的情況下
4.為path
繪制邊緣[path stroke]
或 為path
繪制填充[path fill]
- 只創(chuàng)建
path
并用來當做其他對象的屬性而設(shè)置畸裳,比如CAShapeLayer
飛過去吧