关于NSTimer与ScrollView冲突问题的解决

有这样一个场景,在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中也能起到同样的效果

如有哪里写的不妥欢迎大神们指正~~

你可能感兴趣的:(关于NSTimer与ScrollView冲突问题的解决)