這是一個網(wǎng)上出過文章的例子,很多人都寫過,但是大都是拷貝一個人作者的原文,這篇文章主要的目的是為了細(xì)致解析效果實(shí)現(xiàn)的關(guān)鍵點(diǎn),以及提供有詳細(xì)注釋的Dome。給有需要的朋友提供思路。
實(shí)現(xiàn)的技術(shù)關(guān)鍵點(diǎn):
- CADisplayLink是圖層框架 Quartz Core 中的一個類,可以把它理解為一個定時器。 CADisplayLink可以確保系統(tǒng)渲染每一幀的時候我們的方法都被調(diào)用,從而保證了動畫的流暢性.
CADisplayLink 默認(rèn)每秒運(yùn)行60次,將它的frameInterval屬性設(shè)置為2,意味CADisplayLink每隔一幀運(yùn)行一次,變?yōu)槊棵脒\(yùn)行30次,
使用場合相對專一,適合做UI的不停重繪,比如自定義動畫引擎或者視頻播放的渲染。不需要在格外關(guān)心屏幕的刷新頻率了,本身就是跟屏幕刷新同步的。
選擇CAShapeLayer 的原因:
- 渲染效率高渲染快速。CAShapeLayer使用了硬件加速,繪制同一圖形會比用Core Graphics快很多。
- 高效使用內(nèi)存。一個CAShapeLayer不需要像普通CALayer一樣創(chuàng)建一個寄宿圖形,所以無論有多大,都不會占用太多的內(nèi)存。
- 不會被圖層邊界剪裁掉。一個CAShapeLayer可以在邊界之外繪制。你的圖層路徑不會像在使用Core Graphics的普通CALayer一樣被剪裁掉。
- 不會出現(xiàn)像素化。當(dāng)你給CAShapeLayer做3D變換時,它不像一個有寄宿圖的普通圖層一樣變得像素化。
實(shí)現(xiàn)的主要過程:
- 使用CADisplayLink 注冊定時器
- 創(chuàng)建兩個圖層,一個為前面的實(shí)浪圖層,一個為后面的遮罩浪圖層。設(shè)置兩個圖層的大小相同,高度都是一個浪的高度
- 在定時器的綁定方法中 使用 正弦曲線函數(shù)和for 方法繪制路徑
- 把繪制好的路徑分別賦給兩個圖層。
- 設(shè)定好“船”的 y坐標(biāo)。
- 隨著定時器的每次調(diào)用就會出現(xiàn)想要的波浪效果。
dome效果如下:
舟行碧波上.gif