本系列文章為自己學習BezierPath的過程記錄,有些知識是百度出來的芥映,這里算個總結洲尊。
1: 畫直線远豺,也叫做一階曲線。
- (void)drawRect:(CGRect)rect
{
// 設置線的填充色
[[UIColor redColor] setStroke];
// 新建一個bezier對象
UIBezierPath *bezierPath = [UIBezierPath bezierPath];
// 設置線寬度
bezierPath.lineWidth = 10;
// 設置線兩頭樣式
bezierPath.lineCapStyle = kCGLineCapRound;
// 設置起點坞嘀、終點坐標
[bezierPath moveToPoint:CGPointMake(10, 10)];
[bezierPath addLineToPoint:CGPointMake(100, 100)];
// 開始繪制
[bezierPath stroke];
}
效果圖:
2: 二階曲線
二階曲線躯护,是指有一個公共切點(不知道怎么形容)曲線
網(wǎng)上扣了一張圖,B這個點姆吭,就是所謂的公共切點
- (void)drawRect:(CGRect)rect
{
// 設置線的填充色
[[UIColor redColor] setStroke];
// 新建一個bezier對象
UIBezierPath *bezierPath = [UIBezierPath bezierPath];
// 設置線寬度
bezierPath.lineWidth = 10;
// 設置線兩頭樣式
bezierPath.lineCapStyle = kCGLineCapRound;
// 設置起點榛做、終點坐標
[bezierPath moveToPoint:CGPointMake(100, 100)];
[bezierPath addQuadCurveToPoint:CGPointMake(200, 200) controlPoint:CGPointMake(300, 0)];
// 開始繪制
[bezierPath stroke];
}
這里的公共切點,就是右上角那個點啦内狸。
3: 三階曲線
三階曲線,與二階曲線類似厘擂,系統(tǒng)都有提供內置的方法昆淡,只是多了一個公共切點而已。
- (void)drawRect:(CGRect)rect
{
// 設置線的填充色
[[UIColor redColor] setStroke];
// 新建一個bezier對象
UIBezierPath *bezierPath = [UIBezierPath bezierPath];
// 設置線寬度
bezierPath.lineWidth = 10;
// 設置線兩頭樣式
bezierPath.lineCapStyle = kCGLineCapRound;
// 設置起點刽严、終點坐標
[bezierPath moveToPoint:CGPointMake(100, 100)];
[bezierPath addCurveToPoint:CGPointMake(200, 200) controlPoint1:CGPointMake(150, 0) controlPoint2:CGPointMake(150, 300)];
// 開始繪制
[bezierPath stroke];
}
4: 多階曲線
系統(tǒng)最多只給出了三階曲線的繪制方法昂灵,這時有的人就要說了,產(chǎn)品要做一個4階舞萄、5階的曲線眨补,怎么搞?
查一下API倒脓,你會發(fā)現(xiàn)一個appendPath的方法撑螺,不用說,看名字就知道什么意思了吧崎弃。
- (void)drawRect:(CGRect)rect
{
// 設置線的填充色
[[UIColor redColor] setStroke];
// 新建一個bezier對象
UIBezierPath *bezierPath = [UIBezierPath bezierPath];
// 設置線寬度
bezierPath.lineWidth = 10;
// 設置線兩頭樣式
bezierPath.lineCapStyle = kCGLineCapRound;
// 設置起點甘晤、終點坐標
[bezierPath moveToPoint:CGPointMake(100, 100)];
[bezierPath addCurveToPoint:CGPointMake(200, 200)
controlPoint1:CGPointMake(150, 0)
controlPoint2:CGPointMake(150, 300)];
// 創(chuàng)建第二條貝塞爾曲線
UIBezierPath *bezierPath2 = [UIBezierPath bezierPath];
// 設置起點、終點坐標
[bezierPath2 moveToPoint:CGPointMake(200, 200)];
[bezierPath2 addCurveToPoint:CGPointMake(290, 290)
controlPoint1:CGPointMake(250, 0)
controlPoint2:CGPointMake(250, 300)];
// 將第二條線饲做,加到第一條線上面去
[bezierPath appendPath:bezierPath2];
// 開始繪制
[bezierPath stroke];
}