UIScrollView暂停NSTimer直到滚动完成

UIScrollView (或其派生类)正在滚动时,似乎所有运行的NSTimers都暂停,直到滚动完成。

有没有办法解决这个问题? 主题? 优先级设置? 什么?

一个简单易行的解决scheme是:

 NSTimer *timer = [NSTimer timerWithTimeInterval:... target:... selector:.... userInfo:... repeats:...]; [[NSRunLoop mainRunLoop] addTimer:timer forMode:NSRunLoopCommonModes]; 

任何人使用Swift 3

 timer = Timer.scheduledTimer(timeInterval: 0.1, target: self, selector: aSelector, userInfo: nil, repeats: true) RunLoop.main.add(timer, forMode: RunLoopMode.commonModes) 

是的,保罗是对的,这是一个运行循环问题。 具体而言,您需要使用NSRunLoop方法:

 - (void)addTimer:(NSTimer *)aTimer forMode:(NSString *)mode 

这是很快的版本。

 timer = NSTimer.scheduledTimerWithTimeInterval(0.01, target: self, selector: aSelector, userInfo: nil, repeats: true) NSRunLoop.mainRunLoop().addTimer(timer, forMode: NSRunLoopCommonModes) 

如果您希望定时器在滚动时触发,则必须运行另一个线程和另一个运行循环; 因为定时器是作为事件循环的一部分进行处理的,所以如果你正在忙于处理滚动你的视图,那么你永远不会看到定时器。 虽然在其他线程上运行定时器的性能/电池损失可能不值得处理这种情况。