Pregunta

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

¿Hay una manera de evitar esto? ¿Trapos? ¿Un ajuste de prioridad? ¿Algo?

¿Fue útil?

Solución

Un sencillo & amp; La solución simple de implementar es hacer:

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

Otros consejos

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 bucle de ejecución. Específicamente, necesita utilizar el método NSRunLoop:

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

Esta es la versión swift.

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

Tienes que ejecutar otro hilo y otro bucle de ejecución si quieres que los temporizadores se activen 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 podrá acceder a los temporizadores. Aunque la pena de rendimiento / batería de correr temporizadores en otros subprocesos podría no valer la pena manejar este caso.

para cualquiera que use Swift 4:

    timer = Timer(timeInterval: 1, target: self, selector: #selector(timerUpdated), userInfo: nil, repeats: true)
    RunLoop.main.add(timer, forMode: .common)
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top