UIScrollViewは、スクロールが終了するまでNSTimerを一時停止します
-
03-07-2019 - |
質問
UIScrollView
(またはその派生クラス)がスクロールしている間、実行中のすべての NSTimers
はスクロールが終了するまで一時停止するようです。
これを回避する方法はありますか?スレッド?優先度設定?何か?
解決
簡単な&ソリューションを実装するのは簡単です:
NSTimer *timer = [NSTimer timerWithTimeInterval:...
target:...
selector:....
userInfo:...
repeats:...];
[[NSRunLoop mainRunLoop] addTimer:timer forMode:NSRunLoopCommonModes];
他のヒント
Swift 3を使用している場合
timer = Timer.scheduledTimer(timeInterval: 0.1,
target: self,
selector: aSelector,
userInfo: nil,
repeats: true)
RunLoop.main.add(timer, forMode: RunLoopMode.commonModes)
はい、ポールは正しい、これは実行ループの問題です。具体的には、NSRunLoopメソッドを使用する必要があります。
- (void)addTimer:(NSTimer *)aTimer forMode:(NSString *)mode
これは迅速なバージョンです。
timer = NSTimer.scheduledTimerWithTimeInterval(0.01, target: self, selector: aSelector, userInfo: nil, repeats: true)
NSRunLoop.mainRunLoop().addTimer(timer, forMode: NSRunLoopCommonModes)
スクロール中にタイマーを起動するには、別のスレッドと別の実行ループを実行する必要があります。タイマーはイベントループの一部として処理されるため、ビューのスクロール処理に忙しい場合は、タイマーに到達することはありません。ただし、他のスレッドでタイマーを実行することによるパフォーマンス/バッテリーのペナルティは、このケースを処理する価値がないかもしれません。
誰でもSwift 4を使用:
timer = Timer(timeInterval: 1, target: self, selector: #selector(timerUpdated), userInfo: nil, repeats: true)
RunLoop.main.add(timer, forMode: .common)
所属していません StackOverflow