Я видел несколько вопросов, подобных этому; однако ни одна из них не разрешила мою проблему. Мой таймер просто идет слишком медленно. Я использую только интервал 0.01
секунд. Вот мой код:NSTimer Too Slow
@IBOutlet var timerLabel: UILabel!
var miliseconds = 0
var seconds = 0
func updateLabel() {
if miliseconds == 0 {
timerLabel.text = "\(seconds).00"
} else if miliseconds < 10 {
timerLabel.text = "\(seconds).0\(miliseconds)"
} else {
timerLabel.text = "\(seconds).\(miliseconds)"
}
}
var timer = NSTimer()
func updateTime() {
miliseconds++
if miliseconds == 100 {
miliseconds = 0
seconds++
}
updateLabel()
}
override func touchesEnded(touches: Set<UITouch>, withEvent event: UIEvent?) {
if timerState == 1 {
timer = NSTimer.scheduledTimerWithTimeInterval(0.01, target: self, selector: "updateTime", userInfo: nil, repeats: true)
NSRunLoop.mainRunLoop().addTimer(timer, forMode: NSRunLoopCommonModes)
timerLabel.textColor = UIColor.blackColor()
timerState = 2
}
}
override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
if timerState == 0 {
miliseconds = 0
seconds = 0
updateLabel()
timerLabel.textColor = UIColor.greenColor()
timerState = 1
} else if timerState == 2 {
timerState = 0
timer.invalidate()
}
}
var timerState = 0
//timerState of 0 = Has not started
//timerState of 1 = About to start
//timerState of 2 = Timing
Я также попытался с помощью задержки:
func delay(delay:Double, closure:()->()) {
dispatch_after(
dispatch_time(DISPATCH_TIME_NOW, Int64(delay * Double(NSEC_PER_SEC))), dispatch_get_main_queue(), closure)
}
Я назвал updateTime
в viewDidLoad
, и в конце updateTime
, я добавил:
delay(0.01) {() ->() in
self.updateTime()
}
Однако , он по-прежнему шел с той же скоростью, что и раньше.
Как исправить эту проблему? Если я пропустил вопрос во время исследования, пожалуйста, дайте мне знать. Благодаря!
Можете ли вы объяснить, что проблема, которую вы пытаетесь решить? – UlyssesR
ли достаточно 0,01 с выполнения этой задачи вы запросили в каждом цикле? Если нет, то выполнение интервала будет задержана/пропущено. Кроме того,' NSTimer' имеет низкое разрешение. Прочитайте [this] (http://stackoverflow.com/a/18584973/188331) – Raptor
@UlyssesR, мой таймер идет слишком медленно. Как это исправить? – penatheboss