1需求
需要弄一個下圖的動畫漓藕。先認(rèn)真看一下動畫陶珠。慢慢的看。注意我為什么在中間停那么久享钞。揍诽。。嫩与。寝姿。。
2分析需求
當(dāng)silde條在左右滑動的時候划滋,上面的動畫在不停的左右移動饵筑,我錄制視頻的時候在中間點(diǎn)稍微停頓了一下。其實(shí)就是一個三角形处坪,這個三角形的頂點(diǎn)在一個"倒置的V字"上面運(yùn)動根资。
其實(shí)只需要找到頂點(diǎn)的位置,就可以簡單的將動畫繪制出來同窘。下面是demo的下載地址:github.com/hnustJoe/sildeAnimate
3實(shí)現(xiàn)步驟
(1):這里需要用到一些CAlayer的基礎(chǔ)知識玄帕,有關(guān)CALayer的兩個屬性,我簡單的講一下:
anchorPoint:錨點(diǎn)想邦,想象一下一個點(diǎn)將一張A4紙掛在墻上裤纹。
position:就是上面錨點(diǎn)的位置。
沒有看懂的笨蛋們可以看一下這位大神寫的:iOS開發(fā)-CALayer的探究應(yīng)用 - CocoaChina_讓移動開發(fā)更簡單
現(xiàn)在需要在自定義視圖的UIView(代碼中的BCView)上添加一個自定義的CALayer(AnimateLayer);至于為什么要兩個自定義鹰椒,我也沒有具體去分析锡移,我得給自己留點(diǎn)問題。
順便說一下這個slide漆际,我是通過silde的值的變化來繪制動畫淆珊,然后在自定義的AnimateLayer中設(shè)置一個對外的progress屬性。我就可以通過改變屬性來繪制動畫奸汇。
(2)為什么要設(shè)置一個progress屬性呢施符?其實(shí)這個progress屬性就是上面提到的運(yùn)動的頂點(diǎn)(也就是我一直強(qiáng)調(diào)的那個點(diǎn)!)擂找。所以通過每次progress的屬性的改變戳吝,來計算好頂點(diǎn)的位置來重新畫圖。現(xiàn)在婴洼,設(shè)置一下自定義的Calyer的progress設(shè)置方法:
(3)我覺得是最重要的一個步驟
繪制三角形骨坑,這其實(shí)也不算三角形,我把它看成兩條線斷柬采,左邊藍(lán)色的欢唾,和右邊灰色的。先繪制藍(lán)色的還是先繪制灰色的粉捻,大家可以都去試一下礁遣。
既然是繪制兩條線斷,那么就需要找出那個特殊的點(diǎn)肩刃!我在代碼中使用middleX祟霍,middleY來標(biāo)志中標(biāo)示這個特殊的點(diǎn)的橫縱坐標(biāo)。其中要把0.5這個間隔分割開來盈包,這得留給大家去思考沸呐。其中middleX和MiddleY怎么計算,最好自己去算一下呢燥。
我是先繪制右邊的崭添,然后再繪制左邊。
最后簡單的說一下我對CGMutablePathRef畫線的理解叛氨。先告訴畫布說:我要畫一條線-》將筆尖在畫布上面打兩個點(diǎn)-》打完點(diǎn)以后就再告訴畫布:線的顏色呼渣。。寞埠。端點(diǎn)的形式屁置。。仁连。線條的寬度蓝角。。。-》好使鹅!stokepath(封閉線路)F南蟆!并徘!。
附加
1感謝這位大神的博文:iOS開發(fā)-CALayer的探究應(yīng)用 - CocoaChina_讓移動開發(fā)更簡單
2大家伙有什么疑問的可以給我評論扰魂。