iOS中的CADisplayLink定時器
阿新 • • 發佈:2018-11-25
iOS中的CADisplayLink定時器
說到定時器,在iOS中最常用的為NSTimer類,其實CADisplayLink類在某些場景下使用,要比NSTimer類更加適合。首先CADisplayLink也是一種定時器,並且其和螢幕的重新整理率始終保持一致(很多時候會使用CADisplayLink來檢測螢幕的幀率)。由於CADisplayLink的這種特性,使用它來實現流暢的動畫效果非常合適。
CADisplayLink類非常簡單,解析如下:
//建立CADisplayLink物件 /* 需要注意 定時器物件建立後 並不會馬上執行 需要新增到runloop中 */ + (CADisplayLink *)displayLinkWithTarget:(id)target selector:(SEL)sel; //將當前定時器物件加入一個RunLoop中 - (void)addToRunLoop:(NSRunLoop *)runloop forMode:(NSRunLoopMode)mode; //將當前定時器物件從一個RunLoop中移除 如果這個Runloop是定時器所註冊的最後一個 移除後定時器將被釋放 - (void)removeFromRunLoop:(NSRunLoop *)runloop forMode:(NSRunLoopMode)mode; //將定時器失效掉 呼叫這個函式後 會將定時器從所有註冊的Runloop中移除 - (void)invalidate; //當前時間戳 @property(readonly, nonatomic) CFTimeInterval timestamp; //距離上次執行所間隔的時間 @property(readonly, nonatomic) CFTimeInterval duration; //預計下次執行的時間戳 @property(readonly, nonatomic) CFTimeInterval targetTimestamp; //設定是否暫停 @property(getter=isPaused, nonatomic) BOOL paused; //設定預期的每秒執行幀數 例如設定為1 則以每秒一次的速率執行 @property(nonatomic) NSInteger preferredFramesPerSecond CA_AVAILABLE_IOS_STARTING(10.0, 10.0, 3.0); //同上 @property(nonatomic) NSInteger frameInterval CA_AVAILABLE_BUT_DEPRECATED_IOS (3.1, 10.0, 9.0, 10.0, 2.0, 3.0, "use preferredFramesPerSecond");
我的部落格即將搬運同步至騰訊雲+社群,邀請大家一同入駐:https://cloud.tencent.com/developer/support-plan?invite_code=29qwh7m53g4kc