關于NSTimer與ScrollView沖突問題的解決

分類:技術 時間:2016-10-25

有這樣一個場景,在 UIScrollView 中添加一個 Label ,通過 NSTimer 去給這個 Label 添加一個倒計時功能,如果在將計時器添加到 RunLoop 中的時候使用了 NSDefaultRunLoopMode ,那么當 ScrollView 滾動時 Label 上的倒計時就會停止,但是如果使用了 NSRunLoopCommonModes 就不會出現這樣的情況。

之所以會這樣,是因為主線程的 NSRunLoop 默認有兩個 Mode ,一個是 NSDefaultRunLoopMode ,另一個是 UITrackingRunLoopMode ,當 ScrollView 滾動時會默認切換到 UITrackingRunLoopMode ,加入只是添加到 NSDefaultRunLoopMode 中,那么切換 Mode 時自然就不會再執行 NSTimer 的方法了,而 NSRunLoopCommonModes 這個 Mode 實際上是 NSDefaultRunLoopModeUITrackingRunLoopMode 的集合體,注意看是 NSRunLoopCommonModes 后面多了一個 s ,其實這個 CommonModes 是默認標記了這兩個 Mode ,當給 RunLoop 中添加 Timer 時給這兩個 Mode 中同時添加了這個 Timer ,所以當 Mode 切換時就不會有問題了,當然可以同時將 Timer 添加到這兩個 Mode 中也能起到同樣的效果

如有哪里寫的不妥歡迎大神們指正~~


Tags: ScrollView NSTimer

文章來源:http://www.jianshu.com/p/424a7e01dca6


ads
ads

相關文章
ads

相關文章

ad