先說說CGContextRef吧,為什么要先說它呢,因為一開始對它的不理解而踩了不少的坑,這東西叫圖文上下,聽起來很讓人費解的一個東西,用白話說,這是一個畫板。如果你想要繪制,你就必須去拿到這個CGContextRef在他上面去繪制,說了這么費話,下面說說博主的需求,博主想要做的是一個涂鴉(剛開始,博主不知道怎么去形容這個需求,博主就先去了谷歌,然后就有了下面的代碼)。
有問題的代碼
有問題的代碼
下面就是這個圖畫出來的東西
從A點沿紅線畫到B點
博主是從A點沿紅線畫到B點,結果A與B之間多了一條直線,這不是博主想要的,博主可不想要這直線。一開始以為自己方法搞錯了,于是博主把CGContextAddLineToPoint方法改成CGContextAddLines以后變成虛線。
錯誤代碼
當時博主的心情是非常的郁悶的,后來與一位大神討論的時候,發現了問題,原來是那個point的全局變量有關。因為每次繪制完,point這個全局變量都是數組的最后一個值對吧。然后又觸發重繪的時候,此時point是上一次的結束點,而數組的開始又是最一開始touchbegan的點,所以就出現了這樣的問題。把代碼修改如下:
修改后的代碼
修改后的代碼
在drawRect方法里的代碼
先說說為什么這么寫,當初定了一個point全局變量是因為想讓畫的東西連起來,也就是一個點到另外一個點的連線博主可以直接就在這個數據里拿就行了,把第一個點與第二個點給拿出來就行了(有時候靈光一閃很重要)。好了,說了這么多CGContextRef的,下面來說說用UIBezierPath怎樣來實現博主的需求,直接上代碼:
在touchesBegan方法里創建了一個全局的path變量
給path一個touchPoint,讓它進行繪制并進行添加到數組里
遍歷數組進行繪制
好了,上面就是兩個方法的涂鴉,是不是感覺UIBezierPath繪制的代碼更少?更好用點,哈哈。最后,再說一句,如果博主的文章,給了你點啟發,要記得好評哦!!!點這里獲取demo。