序
在百度和簡書上找到很多實現(xiàn)的代碼纲菌。找到的實現(xiàn)方式對于剛接觸的人來說钱慢,很亂,很多方式缘眶。為何呢:因為實現(xiàn)畫圖的代碼有分三種嘱根。而大部分的博文里面都只介紹了其中的一種方式而已,所以我根據(jù)幾種實現(xiàn)方式進(jìn)行了統(tǒng)計巷懈,自己整理了如下的文章该抒。并且給出自己的建議和理解。
如果存在不合理的地方請指出顶燕。
1.實現(xiàn)畫圖有三種代碼可以實現(xiàn):
UIBezierPath(貝塞爾曲線路徑):使用面向?qū)ο蠓绞骄幋a
CGContextRef(圖形上下文):是用函數(shù)式編碼
CGMutablePathRef(圖形路徑):是用函數(shù)式編碼
2.都能夠?qū)崿F(xiàn)簡單的畫圖技巧
3.畫圖的幾個注意點
3.1顏色:線條和填充
3.3線寬
3.3畫圖邏輯(圖形的組成步驟)
3.4作畫(畫線還是填充)
3.5釋放CGPathRef
3.6是否有虛線(lineDashPhase凑保,lineDashPattern)
3.7是否完整的畫圖(StrokeStart冈爹,StrokeEnd)
4.實現(xiàn)思路
1.在drawRect方法中畫圖:使用三種方法都行(參考第一點)
2.使用CAShapeLayer(繼承CALayer)在這個畫布上作畫,可以把這個圖層添加到任何地方欧引。
在使用畫布的方法中可以使用貝塞爾曲線路徑(UIBezierPath)和圖形路徑(CGMutablePathRef)
在CAShapeLayer有個屬性是path犯助,就是給定圖形路徑。而使用UIBezierPath有個屬性是CGPath维咸。
5.個人總結(jié)和建議
建議使用CAShapeLayer和UIBezierPath方式完成畫圖剂买,原因有:
1.都是面向?qū)ο笤O(shè)計,易理解癌蓖。
2.使用圖層可以在任何地方畫圖瞬哼,不受限于drawRect的位置。
3.對于要做動畫的代碼而言租副,畫圖的代碼完全可以復(fù)用坐慰。直接使用圖形的路徑就可以做到簡單的動畫。
4.不需要手動釋放對象用僧。(Ref結(jié)尾的需要手動釋放內(nèi)存(CGPathRef)结胀,除非是系統(tǒng)運(yùn)行時默認(rèn)會帶上的(CGContextRef))