UIScrollView pausa NSTimer até acabamentos de rolagem
-
03-07-2019 - |
Pergunta
Enquanto um UIScrollView
(ou uma classe derivada dela) está rolando, parece que toda a NSTimers
que estão executando get em pausa até que o rolo está terminado.
Existe uma maneira de contornar este problema? Tópicos? A definição de prioridades? Qualquer coisa?
Solução
Um fácil e simples de implementar solução é fazer:
NSTimer *timer = [NSTimer timerWithTimeInterval:...
target:...
selector:....
userInfo:...
repeats:...];
[[NSRunLoop mainRunLoop] addTimer:timer forMode:NSRunLoopCommonModes];
Outras dicas
Para qualquer um usando Swift 3
timer = Timer.scheduledTimer(timeInterval: 0.1,
target: self,
selector: aSelector,
userInfo: nil,
repeats: true)
RunLoop.main.add(timer, forMode: RunLoopMode.commonModes)
Sim, Paul está certo, esta é uma questão de loop prazo. Especificamente, você precisa fazer uso do método NSRunLoop:
- (void)addTimer:(NSTimer *)aTimer forMode:(NSString *)mode
Esta é a versão rápida.
timer = NSTimer.scheduledTimerWithTimeInterval(0.01, target: self, selector: aSelector, userInfo: nil, repeats: true)
NSRunLoop.mainRunLoop().addTimer(timer, forMode: NSRunLoopCommonModes)
Você tem que correr outro segmento e outro loop prazo, se você quiser temporizadores ao fogo durante a rolagem; desde temporizadores são processados ??como parte do ciclo de eventos, se você estiver ocupada processando rolagem seu ponto de vista, você nunca dar a volta aos temporizadores. Embora a pena de perf / bateria de correr temporizadores em outros tópicos pode não valer a pena lidar com este caso.
para uso ninguém Swift 4:
timer = Timer(timeInterval: 1, target: self, selector: #selector(timerUpdated), userInfo: nil, repeats: true)
RunLoop.main.add(timer, forMode: .common)