UIScrollView
(またはその派生クラス)がスクロールしている間、実行中のすべてがスクロールが終了するまで一時停止しているように見えますNSTimers
。
これを回避する方法はありますか?スレッド?優先順位の設定?なんでも?
UIScrollView
(またはその派生クラス)がスクロールしている間、実行中のすべてがスクロールが終了するまで一時停止しているように見えますNSTimers
。
これを回避する方法はありますか?スレッド?優先順位の設定?なんでも?
簡単で簡単に実装できるソリューションは、次のとおりです。
NSTimer *timer = [NSTimer timerWithTimeInterval:...
target:...
selector:....
userInfo:...
repeats:...];
[[NSRunLoop mainRunLoop] addTimer:timer forMode:NSRunLoopCommonModes];
はい、ポールの言うとおりです。これは実行ループの問題です。具体的には、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)
スクロール中にタイマーを起動する場合は、別のスレッドと別の実行ループを実行する必要があります。タイマーはイベント ループの一部として処理されるため、ビューのスクロール処理で忙しい場合は、タイマーにアクセスすることはできません。ただし、他のスレッドでタイマーを実行することによるパフォーマンス/バッテリーのペナルティは、このケースを処理する価値がないかもしれません。