1. 程式人生 > >定時器,在scrollView滑動的時候,定時器nstimer會暫定回撥的解決辦法

定時器,在scrollView滑動的時候,定時器nstimer會暫定回撥的解決辦法

以+ scheduledTimerWithTimeInterval...的方式觸發的timer,在滑動頁面上的列表時,timer會暫定回撥,為什麼?如何解決?

RunLoop只能執行在一種mode下,如果要換mode,當前的loop也需要停下重啟成新的。利用這個機制,ScrollView滾動過程中NSDefaultRunLoopMode(kCFRunLoopDefaultMode)的mode會切換到UITrackingRunLoopMode來保證ScrollView的流暢滑動:只能在NSDefaultRunLoopMode模式下處理的事件會影響ScrollView的滑動。

如果我們把一個NSTimer物件以NSDefaultRunLoopMode(kCFRunLoopDefaultMode)新增到主執行迴圈中的時候, ScrollView滾動過程中會因為mode的切換,而導致NSTimer將不再被排程。

同時因為mode還是可定製的,所以:

Timer計時會被scrollView的滑動影響的問題可以通過將timer新增到NSRunLoopCommonModes(kCFRunLoopCommonModes)來解決。程式碼如下:

//將timer新增到NSDefaultRunLoopMode中
 //然後再新增到NSRunLoopCommonModes裡 
NSTimer *timer = [NSTimer timerWithTimeInterval:1.0 target:self selector:@selector(timerTick:)userInfo:nil repeats:YES]; [[NSRunLoop
 currentRunLoopaddTimer:timer forMode:NSRunLoopCommonModes];