かなり昔に一度調べたことがあるけれど、忘れないようにちょっと書いておく。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.timer
はinvalidate()
する時のために、weakで参照している。