UIScrollView приостанавливает работу NSTimer до завершения прокрутки
пока a UIScrollView
(или его производный класс) прокручивается, похоже, что все NSTimers
которые работают, приостанавливаются до тех пор, пока прокрутка не будет завершена.
есть ли способ обойти это? Нитки? Установка приоритетов? Что-нибудь?
5 ответов:
легко и просто реализовать решение, чтобы сделать:
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
это версия swift.
timer = NSTimer.scheduledTimerWithTimeInterval(0.01, target: self, selector: aSelector, userInfo: nil, repeats: true) NSRunLoop.mainRunLoop().addTimer(timer, forMode: NSRunLoopCommonModes)
вы должны запустить другой поток и другой цикл запуска, если вы хотите, чтобы таймеры срабатывали во время прокрутки; поскольку таймеры обрабатываются как часть цикла событий, если вы заняты обработкой прокрутки вашего представления, вы никогда не доберетесь до таймеров. Хотя штраф perf / battery за запуск таймеров на других потоках, возможно, не стоит обрабатывать этот случай.