##題外蛋
在開始討論UIBezierPath之前,我小小的扯一個一個題外蛋,前不久剛剛決定好好做我自己的博客事業,斗志滿滿的去理解歸納一些概念,如前一段時間寫的@property。不過最近在看了`《Objective-C 高級編程》`后,發現自己的歸納真是停留在最淺顯的一面上,為什么@property能達到相應的效果這些東西都沒有明白理解。
當時就如同頭上被破了一盆冷水,果然基礎的東西,理解歸納起來越是不簡單,不過這樣也讓自己明白了自己的斤兩,這也是一種利處。明白了自己的知識水平后,我決定還是踏實點,不要想着一步登天,還是踏踏實實的記錄自己能力范圍內的知識,慢慢的提高自己。
放緩浮躁的心,慢慢去進步吧。
##UIBezierPath
現在進入正題。
UIBezierPath這個類呢主要用於繪圖。
之前的項目中需要繪圖的部分都是用`Core Graphics`來繪制,OC是我的第一門語言,所以對於`Core Graphics`的C語言`API`不太適應,最近發現原來蘋果的`UIKit`中已經對`Core Graphics`做了一些簡單的封裝,`UIBezierPath`就是其中一個。`UIBezierPath`已經完全滿足了我對繪圖的一些基本要求。
UIBezierPath的好處顯而易見。
* 首先它是`OC`語言的,相對於c語言的Core Graphics來說更為平易近人。
* 其次它能夠使用`ARC`,如果我們直接使用CGPathRef的話,還要自己負責在合適的時候釋放。
現在我就根據自己的使用來做一下簡單記錄。
##使用
UIBezierPath的使用相當簡單,分為三步:
* 創建path
* 添加路徑到path
* 將path繪制出來
例如我們來畫條線:
```objc
// 創建path
UIBezierPath *path = [UIBezierPath bezierPath];
// 添加路徑[1條點(100,100)到點(200,100)的線段]到path
[path moveToPoint:CGPointMake(100 , 100)];
[path addLineToPoint:CGPointMake(200, 100)];
// 將path繪制出來
[path stroke];
```

同樣的我們也可以畫一個圓
```objc
UIBezierPath *path = [UIBezierPath bezierPath];
[path addArcWithCenter:self.center radius:100.0 startAngle:0.0 endAngle:180.0 clockwise:YES];
[path stroke];
```

除了畫線、畫圓之外,我們還可以畫其他各種圖形。
具體的方法你都可以在UIBezierPath的頭文件里面找到,而使用過程和Core Graphics基本一致。
其中有一個地方是需要我們注意的。就是顏色的設置。
UIBezierPath顏色的設置並沒有包含在自己類中,而是通過UIColor直接設置的。
例:
```objc
// 設置描邊色
[[UIColor blueColor] setStroke];
// 設置填充色
[[UIColor redColor] setFill];
```
看上去是UIColor的方法,其實也是對於CGContextRef的渲染,最終還是作用到CGConextRef上的
而UIBezierPath其實也就是對CGPathRef的封裝
所以UIBezierPath通過UIColor的方法來設置顏色也就不奇怪了。
因為UIColor和UIBezierPath最終還是通過Core Graphics的方法來繪圖的,只不過蘋果又封裝了一層OC。
最后結合上面那個畫圓的例子,把顏色添加進去,再來看下效果。
```
//創建path
UIBezierPath *path = [UIBezierPath bezierPath];
// 添加圓到path
[path addArcWithCenter:self.center radius:100.0 startAngle:0.0 endAngle:M_PI*2 clockwise:YES];
// 設置描邊寬度(為了讓描邊看上去更清楚)
[path setLineWidth:5.0];
//設置顏色(顏色設置也可以放在最上面,只要在繪制前都可以)
[[UIColor blueColor] setStroke];
[[UIColor redColor] setFill];
// 描邊和填充
[path stroke];
[path fill];
```

UIBezierPath繪圖是不是相當的簡單。當然簡單的使用也可以有很炫的效果,具體你可以自行查閱文檔,里面可以有很多變化哦。