第一種: 用CADisplayLink可以實現不停重繪。 - (CADisplayLink *)link { if (!_link) { // 創建定時器,一秒鐘調用rotation方法60次 _link = [CADisplayLink displayLinkWithTarget:self sel ...
第一種:
用CADisplayLink可以實現不停重繪。
- (CADisplayLink *)link { if (!_link) { // 創建定時器,一秒鐘調用rotation方法60次 _link = [CADisplayLink displayLinkWithTarget:self selector:@selector(rotation)]; // 手動將定時器加入事件迴圈中 // NSRunLoopCommonModes會使得RunLoop會隨著界面切換扔繼續使用,不然如果使用Default的話UI交互沒問題,但滑動TableView就會出現不轉問題,因為RunLoop模式改變會影響定時器調度 [_link addToRunLoop:[NSRunLoop currentRunLoop] forMode:NSRunLoopCommonModes]; } return _link; }
第二種:iOS–NSTimer和CADisplayLink的用法
NSTimer初始化器接受調用方法邏輯之間的間隔作為它的其中一個參數,預設一秒執行30次。CADisplayLink預設每秒運行60次,通過它的frameInterval屬性改變每秒運行幀數,如設置為2,意味CADisplayLink每隔一幀運行一次,有效的邏輯每秒運行30次。
此外,NSTimer接受另一個參數是否重覆,而把CADisplayLink設置為重覆(預設重覆?)直到它失效。
還有一個區別在於,NSTimer一旦初始化它就開始運行,而CADisplayLink需要將顯示鏈接添加到一個運行迴圈中,即用於處理系統事件的一個Cocoa Touch結構。
NSTimer 我們通常會用在背景計算,更新一些數值資料,而如果牽涉到畫面的更新,動畫過程的演變,我們通常會用CADisplayLink。
但是要使用CADisplayLink,需要加入QuartzCore.framework及#import
@interface ViewController : UIViewController { NSTimer *theTimer; //聲明 } //使用 float theInterval = 1.0 / 30.0f; //每秒調用30次 theTimer = [NSTimer scheduledTimerWithTimeInterval:theInterval target:self selector:@selector(MyTask) userInfo:nil repeats:YES]; //停用 [theTimer invalidate]; theTimer = nil; /*CADisplayLink 預設每秒運行60次,將它的frameInterval屬性設置為2,意味CADisplayLink每隔一幀運行一次,有效的使游戲邏輯每秒運行30次*/ if(theTimer == nil) { theTimer = [CADisplayLink displayLinkWithTarget:self selector:@selector(MyTask)]; theTimer.frameInterval = 2; [theTimer addToRunLoop: [NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode]; } //停用 [theTimer invalidate]; theTimer = nil;
https://blog.csdn.net/honey199396/article/details/51613436