Сброс кнопки паузы таймера при повторном нажатии - PullRequest
0 голосов
/ 17 сентября 2018

Итак, у меня есть программа, которая является секундомером, и у меня работает секундомер, но когда я нажимаю кнопку паузы, вещь останавливается, но когда я снова нажимаю кнопку запуска, чтобы запустить секундомер с того места, где он остановился, он сбрасывается вместо этого.Я пробовал несколько вещей, но ничего не получается, вы можете мне помочь.ниже приведен мой код для функции сброса, запуска и паузы. Все они - IBactions и Outlets.

Я думаю, что проблема с кнопками запуска или паузы

@IBOutlet weak var startButton: UIButton!
@IBOutlet weak var pauseButton: UIButton!

@IBAction func startTimer(_ sender: AnyObject) {
    if(isPlaying) {
        return
    }
    startButton.isEnabled = false
    pauseButton.isEnabled = true
    isPlaying = true

    let aSelector : Selector = #selector(ViewController.updateTime)
    timer = Timer.scheduledTimer(timeInterval: 0.01, target: self, selector: aSelector, userInfo: nil, repeats: true)

    counter = NSDate.timeIntervalSinceReferenceDate

}


@IBAction func pauseTimer(_ sender: AnyObject) {
    startButton.isEnabled = true
    pauseButton.isEnabled = false


    timer.invalidate()
    isPlaying = false

}

@IBAction func resetTimer(_ sender: AnyObject) {
    startButton.isEnabled = true
    pauseButton.isEnabled = false

    timer.invalidate()
    isPlaying = false
    counter = 0.0
    timeLabel.text = String("00:00:00:00")

}

, затем яТакже есть моя часть Updatetimer, которая, я уверен, работает нормально, но если вам нужно, просто спросите !!

Если вам нужна дополнительная информация или спецификации, просто спросите или оставьте комментарий.

вот мой таймер обновления

@ objc func updateTime () {let currentTime = NSDate.timeIntervalSinceReferenceDate

    //Find the difference between current time and start time.
    var elapsedTime: TimeInterval = currentTime - counter

    //calculates the hour in elapsed time
    let hours = UInt8(elapsedTime / 3600.0)
    elapsedTime -= (TimeInterval(hours) * 3600.0)
    //calculate the minutes in elapsed time.
    let minutes = UInt8(elapsedTime / 60.0)
    elapsedTime -= (TimeInterval(minutes) * 60)

    //calculate the seconds in elapsed time.
    let seconds = UInt8(elapsedTime)
    elapsedTime -= TimeInterval(seconds)

    //find out the fraction of milliseconds to be displayed.
    let fraction = UInt8(elapsedTime * 100)

    //add the leading zero for minutes, seconds and millseconds and store them as string constants
    let strHours = String(format: "%02d", hours)
    let strMinutes = String(format: "%02d", minutes)
    let strSeconds = String(format: "%02d", seconds)
    let strFraction = String(format: "%02d", fraction)

    //concatenate minuets, seconds and milliseconds as assign it to the UILabel
    timeLabel.text = "\(strHours):\(strMinutes):\(strSeconds):\(strFraction)"
}

1 Ответ

0 голосов
/ 17 сентября 2018

Проблема в этой строке counter = NSDate.timeIntervalSinceReferenceDate в вашей функции startTimer().Вы должны установить счетчик, только если counter == 0.0.Поэтому измените свой код следующим образом:

     if counter == 0.0{
          counter = NSDate.timeIntervalSinceReferenceDate

        }else{
          counter = previousDate.timeIntervalSinceReferenceDate

        }

также добавьте следующую строку в функцию паузы, чтобы она сохранила дату, когда счетчик был приостановлен, чтобы в следующий раз счетчик запускался с этой точки:

var previousDate = NSDate()
@IBAction func pauseTimer(_ sender: AnyObject){
//...Your other code...
previousDate = NSDate()
}

Также ваша функция update должна использовать сохраненную дату previousDate для обновления счетчика.Это должно решить проблему.

...