使用CADisplayLink實現果凍效果動畫

2021-06-29 10:32:38 字數 1893 閱讀 4037

cadisplaylink是什麼

比起nstimer,cadisplaylink可以確保系統渲染每一幀的時候我們的方法都被呼叫,從而保證了動畫的流暢性。

demo

我們希望在animate乙個view的時候給它加上果凍效果: 

我們會把所有的邏輯都封裝到乙個blockview裡,在這個view裡首先申明乙個property:

1

@property (strong, nonatomic) cadisplaylink *displaylink;

在動畫開始的時候,初始化displaylink,指定tick方法:

1

2

3

4

5

6

7

8

- (void)startanimation

}

動畫結束的時候invalidate displaylink:

1

2

3

4

5

- (void)completeanimation

每個tick中,我們需要根據當前的位置重繪邊緣,所以只需呼叫setneedsdisplay即可:

1

2

3

4

- (void)tick:(cadisplaylink *)displaylink

在drawrect中,我們計算當前動畫的progress,然後進行繪製。需要注意的是,我們需要通過self.layer.presentationlayer來獲取動畫過程中的位置資訊。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

- (void)drawrect:(cgrect)rect

最後,我們只需要這樣animate這個blockview:

1

2

3

4

5

6

[self.blockview startanimationfrom:from to:to];

[uiview animatewithduration:1 delay:0 usingspringwithdamping:0.85 initialspringvelocity:0 options:0 animations:^ completion:^(bool finished) ];

demo project

使用CADisplayLink寫秒錶

使用cadisplaylink寫秒錶 效果 原始碼 stopwatch.h 與 stopwatch.m stopwatch.h showtime created by youxianming on 14 10 16.import protocol stopwatchdelegate void sto...

Swift3 CADisplayLink簡單用法

1 定義屬性 var displaylinktimer cadisplaylink?nil 2 init displaylinktimer cadisplaylink target self,selector selector self.handlepalettedata displaylinkti...

CADisplayLink定時器(平滑)

1.建立定時器 cadisplaylink link cadisplaylink displaylinkwithtatget self selector selector changy 要想讓cadisplaylink工作,必須得把它新增到主執行迴圈中 每一次螢幕重新整理的時候就會呼叫指定的方法 螢...