UIScrollView pausa NSTimer hasta que termina el desplazamiento

Mientras que UIScrollView (o una clase derivada del mismo) se desplaza, parece que todos los NSTimers que se están ejecutando se NSTimers hasta que finaliza el desplazamiento.

¿Hay alguna forma de evitar esto? ¿Trapos? Una configuración de prioridad? ¿Cualquier cosa?

Una solución fácil y simple de implementar es hacer:

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

Para cualquiera que use Swift 3

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

Sí, Paul tiene razón, este es un problema de ciclo de ejecución. Específicamente, necesita hacer uso del método NSRunLoop:

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

Esta es la versión rápida.

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

Debe ejecutar otro hilo y otro ciclo de ejecución si desea que los temporizadores se disparen mientras se desplaza; dado que los temporizadores se procesan como parte del bucle de eventos, si está ocupado procesando el desplazamiento de su vista, nunca se acerca a los temporizadores. Aunque la penalización de perf / batería de ejecutar temporizadores en otros hilos podría no valer la pena manejar este caso.