UIScrollViewは、スクロールが終了するまでNSTimerを一時停止します

StackOverflow https://stackoverflow.com/questions/605027

  •  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)
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top