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工作,必須得把它新增到主執行迴圈中 每一次螢幕重新整理的時候就會呼叫指定的方法 螢...