Как создать таймер обратного отсчета с минутами и секундами в быстром? - PullRequest
0 голосов
/ 04 июля 2018

Я не могу найти ни одного учебника, который делает таймер обратного отсчета с минутами и секундами. Там один или два, но они вроде плохие.

import UIKit

class HomeViewController: UIViewController {
    @IBOutlet weak var focusSession: UILabel!
    @IBOutlet weak var breakSession: UILabel!

    var prodSeconds = String() // This value is set in a different view controller
    lazy var intProdSeconds = Int(prodSeconds)
    var timer = Timer()
    var isTimerRunning = false  // Make sure only one timer is running at a time

    override func viewDidLoad() {
        super.viewDidLoad()

        if isTimerRunning == false {
            runProdTimer()
        }

        //focusSession.text = String(prodMinutes) + ":" + String(prodSeconds) // Ignore this for now stack overflow ppl
    }

    func runProdTimer() {
        timer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: (#selector(HomeViewController.updateProdTimer)), userInfo: nil, repeats: true)
        isTimerRunning = true
    }

    @objc func updateProdTimer() {
        if intProdSeconds! < 1 {
            timer.invalidate()
            focusSession.text = "00:00"
        }
        else {
            intProdSeconds! -= 1
            focusSession.text = prodTimeString(time: TimeInterval(prodSeconds)!)
        }
    }

    func prodTimeString(time: TimeInterval) -> String {
        let prodMinutes = Int(time) / 60 % 60
        let prodSeconds = Int(time) % 60

        return String(format: "%02d:%02d", prodMinutes, prodSeconds)
    }
}

Пользователь вводит свое время, и оно сохраняется в переменной prodSeconds, которая затем преобразуется в Int ниже ее с помощью переменной lazy.

Однако таймер по-прежнему не ведет обратный отсчет , когда я запускаю приложение. Предположительно, это просто таймер для секунд, который я следовал из другого урока. Но все, что происходит, это то, что метка, отображающая таймер, просто отображает число, введенное пользователем, в формате 00:prodSeconds и фактически не ведет обратный отсчет.

P.S. Не беспокойтесь о реализации кнопки пуска / остановки на данный момент. В моем случае таймер должен запускаться при загрузке представления.

1 Ответ

0 голосов
/ 04 июля 2018

Проблема в том, что вы отсчитываете от

intProdSeconds! -= 1

и передать prodSeconds этому

focusSession.text = prodTimeString(time: TimeInterval(prodSeconds)!)

, поэтому убедитесь, что имеете дело только с intProdSeconds

...