【Swift 3】スクロールすると時が止まる(Timer 旧 NSTimer)

スクロールすると時が止まる

UIScrollなどでスクロール中にTimer(NSTimer)が止まる現象が起こりました

スクロールをキュッキュキュッキュとDJのように動かし続けると、タイマー処理が呼ばれなくなり、スクロール処理をやめると、タイマーが再開されます。具体的には、最近リリースした「絵文字マスター」。絵文字キーボードをスクロールし続けると、制限時間のタイマーが止まってしまいます

どうやら、Timerをメインスレッドで動かしているのが原因みたいです。なので、Timerを別スレッドで動かせば解決します

let myTimer = Timer.scheduledTimer(timeInterval: 1.0, target: self, selector: #selector(updateTimer(_:)), userInfo: nil, repeats: true)
        
RunLoop.current.add(myTimer, forMode: RunLoopMode.commonModes)

func updateTimer(_ timer: Timer) {
    // タイマーで実行したい処理
}

これで解決

参考:NSTimerをメインスレッドで使用した時、タイムアップにずれが生じた – Qiita

タイトルとURLをコピーしました