2016-01-12 1 views
0

Я новичок в Swift - пытаюсь создать приложение для iPhone/iPad. Надеюсь, ты поможешь мне.быстро: остановить таймер обратного отсчета в нуле

Я хочу включить таймер, отсчитывающий с 04:00 до 00:00. Затем он должен остановиться на ноль и вызвать звуковой эффект (который я еще не пытался реализовать). Обратный отсчет начинается, когда вы нажимаете кнопку запуска (в моем коде startTimer и stopTimer ссылаются на одну и ту же кнопку, однако кнопка только один раз нажимается в начале).

Таймер запускается и отсчитывается просто отлично. Он преобразует секунды в минуты, как и планировалось. Тем не менее, моя главная проблема заключается в том, что я не могу заставить обратный отсчет остановиться на ноль. Он продолжается за пределами 00: 0-1 и т. Д. Как это исправить?

import Foundation 
import UIKit 
import AVFoundation 


class Finale : UIViewController { 



    @IBOutlet weak var timerLabel: UILabel! 


    var timer = NSTimer() 
    var count = 240 
    var timerRunning = false 




    override func viewDidLoad() { 
     super.viewDidLoad() 

    } 



    func updateTime() { 
     count-- 


     let seconds = count % 60 
     let minutes = (count/60) % 60 
     let hours = count/3600 
     let strHours = hours > 9 ? String(hours) : "0" + String(hours) 
     let strMinutes = minutes > 9 ? String(minutes) : "0" + String(minutes) 
     let strSeconds = seconds > 9 ? String(seconds) : "0" + String(seconds) 
     if hours > 0 { 
      timerLabel.text = "\(strHours):\(strMinutes):\(strSeconds)" 
     } 

     else { 
      timerLabel.text = "\(strMinutes):\(strSeconds)" 
     } 

    } 



    @IBAction func startTimer(sender: AnyObject) { 

     var timer = NSTimer.scheduledTimerWithTimeInterval(1.0, target: self, selector: Selector("updateTime"), userInfo: nil, repeats: true) 

    } 

func stopTimer() { 

    if count == 0 { 
     timer.invalidate() 
     timerRunning = false 
      } 
    } 



    @IBAction func stopTimer(sender: AnyObject) { 
     timerRunning = false 
    if count == 0 { 
    timer = NSTimer.scheduledTimerWithTimeInterval(1.0, target: self, selector: Selector("stopTimer"), userInfo: nil, repeats: true) 
     timerRunning = true 
     }} 

} 
+0

http://stackoverflow.com/a/29583418/2303865 –

ответ

1

Помните, что таймер не отсчитывать до нуля - вы реализуете, что в вашем коде. Таймер срабатывает каждую секунду.

В функции updateTime, необходимо аннулировать таймер и вызвать вашу звуковую функцию, когда таймер иссякнут

+0

Спасибо, Рассел. Как это сделать недействительным? Я теперь попытался добавить, если count == 0 { timer.invalidate() timerRunning = false } к функции updateTime, но это не останавливается. – mojomo

+0

Это должно быть сделано - но у вас есть две версии таймера! У вас есть одна переменная, определенная с областью класса, но тот, который вы используете, определяется только в функции запуска. Вам нужно удалить «var» перед инициализацией таймера, чтобы вы использовали только одну переменную – Russell

2
func updateTime() { 
     count-- 


     let seconds = count % 60 
     let minutes = (count/60) % 60 
     let hours = count/3600 
     let strHours = hours > 9 ? String(hours) : "0" + String(hours) 
     let strMinutes = minutes > 9 ? String(minutes) : "0" + String(minutes) 
     let strSeconds = seconds > 9 ? String(seconds) : "0" + String(seconds) 
     if hours > 0 { 
      timerLabel.text = "\(strHours):\(strMinutes):\(strSeconds)" 
     } 

     else { 
      timerLabel.text = "\(strMinutes):\(strSeconds)" 
     } 
    stopTimer() 
} 
0

яй! Работает!! Я использовал сочетание двух ответов. Я добавил stopTimer() в мою функцию updateTimer, я удалил «var» из таймера, и я удалил последний абзац/IBAction моего кода. Большое спасибо, ребята! Теперь я попробую добавить звук. :)

+0

Cool - не забудьте указать ответы, которые вам помогли :-) – Russell