Frage

Während ein UIScrollView (oder eine abgeleitete Klasse davon) Scrollen, es scheint wie alle NSTimers, die get laufen angehalten, bis die Scroll beendet ist.

Gibt es eine Möglichkeit, dies zu umgehen? Themen? Eine Prioritätensetzung? Alles, was?

War es hilfreich?

Lösung

Eine einfache und leicht zu implementierende Lösung ist zu tun:

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

Andere Tipps

Für alle, mit Swift 3

timer = Timer.scheduledTimer(timeInterval: 0.1,
                            target: self,
                            selector: aSelector,
                            userInfo: nil,
                            repeats: true)


RunLoop.main.add(timer, forMode: RunLoopMode.commonModes)

Ja, Paul ist richtig, das ist eine Laufschleife Problem. Insbesondere müssen Sie die Verwendung der NSRunLoop Methode machen:

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

Dies ist die schnelle Version.

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

Sie haben einen anderen Thread und einen weiteren Lauf Schleife laufen, wenn Sie Timer beim Scrollen feuern wollen; da Timer als Teil der Ereignisschleife verarbeitet werden, wenn Sie beschäftigt Verarbeitung Scrollen Ihre Ansicht ist, erhalten Sie nie um den Timer. Obwohl die Perf / Batteriestrafe in Höhe von Timern auf anderen Threads laufen möglicherweise nicht wert sein, diesen Fall behandeln.

für jedermann verwenden Swift 4:

    timer = Timer(timeInterval: 1, target: self, selector: #selector(timerUpdated), userInfo: nil, repeats: true)
    RunLoop.main.add(timer, forMode: .common)
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top