下載地址:https://github.com/linsendear/LSDrawTest
錄制腳本:

播放腳本:

這個(gè)demo參考了下面兩個(gè)項(xiàng)目
https://github.com/WillieWu/HBDrawingBoardDemo
https://github.com/Nicejinux/NXDrawKit
也針對(duì)這兩個(gè)demo做了相應(yīng)的優(yōu)化
結(jié)構(gòu):由上至下
1、最上層的UIView(LSCanvas)
使用CAShapeLayer,提高繪制時(shí)的效率
2、第二層的UIImageview是用來(lái)合成LSCanvas用的
這樣畫(huà)很多次的時(shí)候,也不會(huì)占用很高的cpu
3、第三層是UIImageview,是用來(lái)放背景圖的
關(guān)于錄制腳本:
1、//linyl標(biāo)記的代碼都是跟錄制腳本和繪制腳本相關(guān)
2、錄制后需要重新跑程序,因?yàn)檫@只是個(gè)demo
還需要優(yōu)化的地方:
1、在不同設(shè)備上,需要根據(jù)畫(huà)板比例調(diào)整point和線寬等(或者固定畫(huà)板大小)。
2、當(dāng)前的記錄方式是用歸檔的方式,每次有動(dòng)作(撤銷,重做,保存,清空)和每次的touchsend
后,都會(huì)記錄成一個(gè)LSDrawPackage對(duì)象。如果想使用socket傳輸時(shí),可以改為每0.5秒一個(gè)LSDrawPackage對(duì)象
,也就是說(shuō),每個(gè)LSDrawPackage對(duì)象都是一段時(shí)間內(nèi)的繪制和操作。(還有一種做法是傳送圖片或關(guān)鍵幀,但這時(shí)候需要評(píng)估網(wǎng)絡(luò)能力,還有繪制的感覺(jué)也不一樣)
3、線程處理
demo中使用的是performselector的方式,還需要優(yōu)化。
4、當(dāng)前的繪制端和顯示端公用了很多的內(nèi)部結(jié)構(gòu)。
PS:
1、沒(méi)使用drawrect
2、使用橡皮擦?xí)r,cpu占用率還是非常高。
3、近期沒(méi)有更新計(jì)劃了。如果做socket傳輸?shù)臅r(shí)候,包大小,結(jié)構(gòu)還有很大的優(yōu)化空間。