iOS 雙波浪動畫 – 類似淘寶個人資訊狀態列,京東金融等

發表於2017-01-12

類似淘寶個人資訊狀態列,京東金融等雙波浪動畫

主要方法:通過自定義View,利用正弦函式與餘弦函式的效果.

一.相關概念解釋

正弦函式: y =Asin(ωx+φ)+C
A 表示振幅,也就是使用這個變數來調整波浪的高度
ω表示週期,也就是使用這個變數來調整在螢幕內顯示的波浪的數量
φ表示波浪橫向的偏移,也就是使用這個變數來調整波浪的流動
C表示波浪縱向的位置,也就是使用這個變數來調整波浪在螢幕中豎直的位置。

(1)利用CADisplayLink,進行UI的重新整理.

iOS裝置的螢幕重新整理頻率(FPS)是60Hz,因此CADisplayLink的selector 預設呼叫週期是每秒60次,這個週期可以通過frameInterval屬性設定, CADisplayLink的selector每秒呼叫次數=60/ frameInterval。
比如當 frameInterval設為2,每秒呼叫就變成30次。

關於CADisplayLink,此處用NSTimer亦可.

(2)CAShapeLayer
CAShapeLayer 的物件是一個本身沒有形狀,他的形狀來源於你給定的Path,它依附於path,所以必須給定path,即使path不完整也會自動收尾相接,strokeStart以及stroleEnd代表著這個path中所佔的百分比(可以使用storkeStart和stroleEnd來做曲線進度的動畫).

二.主要程式碼

(1)正弦與餘弦函式

三.相關效果

1.正弦函式與餘弦函式:相同速度/振幅/週期/非震盪效果

112363830-9ec9a295ff0c0483
相同速度:振幅:週期:非震盪.gif

2.正弦函式與餘弦函式:相同速度/振幅/週期/震盪效果*,這就類似淘寶個人資訊狀態列,餘弦函式中加π/2即是峰頂與峰底對應效果

122363830-b66d457f1a96d1e3
相同速度:振幅:週期:震盪.gif
當速度/振幅/週期等改變時,會產生更多的效果:

3.正弦函式與餘弦函式:不同速度/振幅,相同週期/非震盪效果,這個效果用起來也很不錯
此處設定為:正弦與餘弦函式引數不相同時,會產生交錯效果;此處自行嘗試更改即可產生不同動畫效果.

132363830-df7e70a0e9afe145
不同速度:振幅,相同週期非震盪.gif

4.正弦函式與餘弦函式:不同速度/振幅,相同週期/震盪效果

142363830-cc61aebd4ef95e1d
不同速度:振幅,相同週期:震盪.gif

5.正弦函式與餘弦函式:不同速度/振幅,相同週期/,峰頂與峰底對應效果,可自行開啟震盪
更改餘弦函式公式為:

152363830-204c3a4878d940d0
同速度:振幅:週期,峰頂與峰底對應.gif

6.正弦函式與餘弦函式:如果需要讓雙波浪在螢幕下方顯示
更改程式碼為:
以第一個波浪為例,第二個同理更改就行.

162363830-61b7f7c9a2a8716c
螢幕下方顯示.png
四.Demo地址

歡迎star : https://github.com/FTCcheV/DoubleWavesAnimation

五.參考資料

1.http://blog.csdn.net/u010123208/article/details/51227035
2.http://www.tuicool.com/articles/meMVR3

有任何問題請私信或者留言,或者有更好的實現方法,也請告訴我.

相關文章