在项目中, 有个无限循环滚动的计时器功能,但是当当前的tableview 滚动时,会发现, 用定时器定时滚动的事件时间间隔不对,然后发现代码中创建NSTimer
的方式是用的
[NSTimer scheduledTimerWithTimeInterval:<#(NSTimeInterval)#> target:<#(nonnull id)#> selector:<#(nonnull SEL)#> userInfo:<#(nullable id)#> repeats:<#(BOOL)#>]
去创建的,这时NSTimer
默认是添加到NSDefaultRunLoopMode
中。
所以当用户滑动屏幕时,run loop 的mode 将会切换到NSEventTrackingRunLoopMode
中。这样,当前的runloop
就是不是默认的了,而timer 也不再执行了,就会失效。
解决这种问题,就是将当前需要计时滚动的timer 添加到另一个runloop
中,
self.timer = [NSTimer timerWithTimeInterval:5.0 target:self selector:@selector(nextPage) userInfo:nil repeats:YES];
[[NSRunLoop currentRunLoop] addTimer:self.timer forMode:NSRunLoopCommonModes];
网友评论