UIScrollViewを操作している間、NSTimerが反応しない問題の簡単な説明

UIScrollViewを操作している間、NSTimerが反応しない問題の簡単な説明かなり昔に一度調べたことがあるけれど、忘れないようにちょっと書いておく。NSTimerがUIScrollView – UITableViewとかそういう継承したものも含めて – をスクロール中に動かなくなってしまう問題。

問題自体は非常にシンプルで、普通、NSTimerはNSDefaultRunLoopModeにaddされる。だけど、UIScrollViewをユーザーが操作している間は、Run Loop Modeが NSEventTrackingRunLoopModeに変わる。すると、NSTimerが発火しなくなる。

これを回避するためには、独立したNSRunLoopCommonModesにNSTimerをaddすれば良い。

self.timer = NSTimer.scheduledTimerWithTimeInterval(1.0 / 60.0, target: self, selector: "update:", userInfo: nil, repeats: true)
NSRunLoop.mainRunLoop().addTimer(self.timer!, forMode: NSRunLoopCommonModes)

僕の場合はこのようにした。self.timerinvalidate()する時のために、weakで参照している。

参考

Pocket
LINEで送る

You may also like...