当一个UIScrollView
(或其派生类)滚动时,似乎所有NSTimers
正在运行的都会暂停,直到滚动完成.
有办法解决这个问题吗?主题?优先级设置?什么?
一个简单易用的解决方案是:
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)
是的,Paul是对的,这是一个运行循环问题.具体来说,您需要使用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)
如果你想在滚动时触发定时器,你必须运行另一个线程和另一个运行循环; 由于计时器是作为事件循环的一部分处理的,如果您正在忙于处理滚动视图,那么您永远不会到达计时器.虽然在其他线程上运行计时器的性能/电池损失可能不值得处理这种情况.