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)

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

对任何人使用Swift 4:

    timer = Timer(timeInterval: 1, target: self, selector: #selector(timerUpdated), userInfo: nil, repeats: true)
    RunLoop.main.add(timer, forMode: .common)
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top