最近看畫板捡絮,就自己對照sketchmaster做了一個,效果還可以莲镣,發(fā)出來共享下福稳,git地址:AnyDraw。
純屬個人手?jǐn)]剥悟,歡迎好的建議灵寺,歡迎fork共同改進(jìn)曼库。
1.介紹
這是一個參照sketchmaster界面制作的畫板,頁面簡捷易操作略板。它包含以下功能:
- 5種畫筆(包括橡皮)毁枯,每種筆有不同的特性,這也是一個可玩點(diǎn)叮称。
- 獨(dú)立粗細(xì)控制种玛。
- 豐富的顏色選擇器。預(yù)設(shè)18種顏色瓤檐,及一個取色器赂韵。
- 可更換畫布背景。
- 前進(jìn)挠蛉、回退控制祭示。
- 清除與保存到相冊。
1.1 界面
啟動后頁面如下:
頁面分為三部分:
- 導(dǎo)航欄
- 畫布
- 底部工具欄
1.2 功能介紹
筆類型選擇器
目前做了5種筆谴古,分別為:圓珠筆质涛、傾斜筆、米形筆掰担、噴槍汇陆、橡皮擦。筆的起名不一定正確带饱,能理解就行毡代。
顏色選擇器
目前有固定顏色與取色器兩種。
畫布切換
其中預(yù)設(shè)了10余種畫布勺疼,可以滑動更換教寂。
粗細(xì)控制
為下方工具欄中央Slider。
每種筆的初始粗細(xì)與顏色可以獨(dú)立控制执庐,修改顏色后孝宗,只會修改對應(yīng)筆的粗細(xì)與顏色屬性。
線條優(yōu)化
對于線條的流暢性耕肩,做了優(yōu)化因妇。方法是取中點(diǎn),做二次bezier猿诸,如下圖所示:
其中綠色空心小點(diǎn)婚被,是我們touchesMove時經(jīng)過的point,但我們不能直接把point連接point去繪制梳虽,那樣全是折線不流暢址芯。
如果此時正畫到currunt點(diǎn),向前取兩個點(diǎn):previous2、previous1谷炸,previous2與previous1中點(diǎn)為mid2北专,previous1與currunt中點(diǎn)為mid1,然后以previous1為控制點(diǎn)旬陡,mid2向mid1繪曲線拓颓,圖中綠色部分。依次向后繪描孟,就能得到平滑曲線驶睦。
快速繪制時,此方法會導(dǎo)致線條顯示偏移原有線路匿醒,不過一般看不出來场航。也考慮過用三次bizier成線,貌似線條不夠自然廉羔。三次bezier參考DEMO
繪制方式
采用了兩種繪制方式溉痢。
- shapeLayer上設(shè)置path
- bitMap繪制
圓珠筆與橡皮擦是直接在shapeLayer上通過設(shè)置path實(shí)現(xiàn),特點(diǎn)是線條流暢憋他,缺點(diǎn)是不能控制線條的粗細(xì)變化敌厘。
其它筆是用bitMap實(shí)現(xiàn)轮蜕,通過把bezier線條大致等分取點(diǎn)他宛,然后在每個點(diǎn)上繪制圖片奴愉。圖片的大小與點(diǎn)的間距可以通過算法控制蔬螟,每個點(diǎn)在bezier線條上的方向也能大致得到此迅,這就提供給了我們無限的擴(kuò)展空間。比如:毛筆的粗細(xì)變化旧巾、路徑上小星星的朝向耸序。
待優(yōu)化
1. 目前bezier曲線均分的算法不夠精確。
2. 每段bezier結(jié)束與下一段bezier間銜接有BUG鲁猩,需要優(yōu)化坎怪。
- 曲線上粗細(xì)變化需要逐漸過渡,目前是突然性的廓握。
4. bezier上點(diǎn)的方向還未判定搅窿。