关于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中也能起到同样的效果

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容