Domanda

Mentre un UIScrollView (o una sua classe derivata) sta scorrendo, sembra che tutti i NSTimer in esecuzione vengano messi in pausa fino al termine dello scorrimento.

C'è un modo per aggirare questo? Le discussioni? Un'impostazione di priorità? Tutto ciò?

È stato utile?

Soluzione

Un facile & amp; soluzione semplice da implementare è fare:

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

Altri suggerimenti

Per chiunque usi 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 ha ragione, si tratta di un problema del ciclo di esecuzione. In particolare, è necessario utilizzare il metodo NSRunLoop:

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

Questa è la versione rapida.

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

È necessario eseguire un altro thread e un altro ciclo di esecuzione se si desidera che i timer si attivino durante lo scorrimento; poiché i timer vengono elaborati come parte del ciclo degli eventi, se sei impegnato nell'elaborazione dello scorrimento della vista, non ti avvicini mai ai timer. Anche se la pena di perf / batteria per l'esecuzione di timer su altri thread potrebbe non valere la pena gestire questo caso.

per chiunque usi Swift 4:

    timer = Timer(timeInterval: 1, target: self, selector: #selector(timerUpdated), userInfo: nil, repeats: true)
    RunLoop.main.add(timer, forMode: .common)
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top