在Scroll 中NSTimer失效

在项目中, 有个无限循环滚动的计时器功能,但是当当前的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];

Reference stackoverflow

你可能感兴趣的:(在Scroll 中NSTimer失效)