結論
NSTimerを別スレッドで動かすようにする。
別スレッドで動かすためには?
NSRunLoopをかませてTimerを動かせば別スレッドで処理が行える
let timer = NSTimer.scheduledTimerWithTimeInterval(1.0, target: self, selector: Selector("timeUp:"), userInfo: nil, repeats: false)
NSRunLoop.currentRunLoop().addTimer(dismissTimer!, forMode: NSRunLoopCommonModes)
func timeUp(timer: NSTimer) {
// タイマー完了
}
背景
NSTimerのタイムアップでボタンのイメージを切り替えていく処理を作成したのですが、同画面に配置しているUIWebViewを動かし続けると、タイマーの完了のメソッドが発火しなかった。
その時(メインスレッドでTimerを動かす時)の処理は下記のような書き方。
let timer = NSTimer.scheduledTimerWithTimeInterval(1.0, target: self, selector: Selector("timeUp:"), userInfo: nil, repeats: false)
func timeUp(timer: NSTimer) {
// タイマー完了
}
上記書き方だと、タイマーがメインスレッドで実行され、UIWebViewなどの操作とバッテイングしてタイマーの完了のメソッドが発火しなかったようです。
参考