Я пытаюсь добавить таймеры в NSRunLoop. Мой ожидаемый результат заключается в том, что после добавления таймеров в цикл они начинают отсчет независимо друг от друга.Правильный способ добавления таймера к NSRunLoop
Мой код теперь выглядит следующим образом:
var timer = NSTimer()
let mainRunLoop:NSRunLoop = NSRunLoop()
func blurViewActive(gestureRecognizer:UIGestureRecognizer) {
if (gestureRecognizer.state == UIGestureRecognizerState.Began){
println("STATE BEGAN")
var point = gestureRecognizer.locationInView(self.tv)
if let indexPath = self.tv.indexPathForRowAtPoint(point){
let data = messageList[indexPath.row] as Messages
if let theCell = self.tv.cellForRowAtIndexPath(indexPath) as? TableViewCell{
self.timer = NSTimer(timeInterval: 1, target: self, selector: "updateCounter", userInfo: nil, repeats: true)
self.mainRunLoop.addTimer(timer, forMode: NSRunLoopCommonModes)
mainRunLoop.run()
}
}
}
}
var counter = 10
func updateCounter(){
if counter == 0{
timer.invalidate()
}else{
counter = --counter
println(counter)
}
}
Прямо сейчас, ничего не кажется, происходит при нажатии кнопки моя. Я понимаю, что как только таймер будет добавлен в цикл запуска, он начнет работать независимо.
Любые предложения относительно того, как это будет сделано правильно, будут оценены.
Я решительно полагаю, что 'mainRunLoop.run()' блокирует основной поток. Есть ли какая-то особая причина, по которой вы определяете свою собственную runloop, вместо того, чтобы просто использовать 'NSTimer (scheduleTimerWithTimeInterval: ...)', который автоматически добавляет таймер в главную runloop? –
@MartinR Вы имеете в виду только замену self.timer ... на "self.timer = NSTimer.scheduledTimerWithTimeInterval (1, target: self, selector:" updateCounter ", userInfo: nil, repeatts: true)"? – martin
Вот что я имел в виду. –