таймер обратного отсчета не обновляется .text - PullRequest
0 голосов
/ 04 октября 2019

Текст для подсчета Это числа, которые мне нравится отсчитывать, S = начало, O = остановка, R = сброс. Добавлено для упрощения функций, но я не хочу их использовать.

Я пытаюсь установить таймер обратного отсчета в этом приложении, но у меня возникают проблемы с его работой с учебниками, которые я видел. Я предполагаю, что эта версия swift имеет различные функции, версия XCode 9.4.

Цель состоит в том, чтобы иметь счетчик на год, дни и время, так как каждый заканчивается, он останавливается и считает следующий, предпочтительноЯ хочу, чтобы случайные числа отсутствовали, кнопки «Пуск» или «Стоп», запуск может быть после открытия приложения или если пользователь принимает на предыдущем экране.

Я пробовал эти методы, но они либо ничего не делают, либо вынуждают меня использовать @object func counter (), я считаю, что таймер не вызывает функцию, если она является объектом, я незнаю, как это назвать.

import UIKit

class ViewController: UIViewController {

    var seconds = 30
    var timer = Timer()

    //these are others I will implement later
    @IBOutlet weak var YRS: UILabel!
    var yrs = 1

    @IBOutlet weak var DAY: UILabel!
    var day = 3

    @IBOutlet weak var HRS: UILabel!
    var hrs = 5

    @IBOutlet weak var SEC: UILabel!
    var sec = 35

    @IBOutlet weak var MIN: UILabel!


    //timer function, I believe I have to change #selector as is not 
    calling the counter func

    @IBAction func str(_ sender: UIButton) {

    //I have also used just counter but nothing changes :/

        timer = Timer.init(timeInterval: 60.0, target: self, selector:          
      #selector(ViewController.counter), userInfo: nil, repeats: true)
         MIN.text = String (seconds)   
    }

    //stop button
    @IBAction func sto(_ sender: Any) {
    }

    //reset button
    @IBAction func rst(_ sender: Any) {
    }

    //counter here -1
    @objc func counter(){
        seconds -= 1
        MIN.text = String(seconds)

        if (seconds == 00) {
            timer.invalidate()
        }
    }


    override func viewDidLoad() {
        super.viewDidLoad()    
    }


    //Something I have tried but did not work

        _ = Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(UIMenuController.update), userInfo: nil, repeats: true)
    }


    func update() {
        if(min > 0) {
            MIN.text = String(min-1)
        }
    }

    //No errors found, the screen is updated with the value but it does not change.

1 Ответ

0 голосов
/ 04 октября 2019

Это был тест на детской площадке. Но вы, конечно, можете также использовать его в своем методе viewDidLoad. Это не готово, вам просто нужно добавить код, где я это прокомментировал (добавить код здесь ...). Я установил таймер на 0,1 секунды, чтобы я мог его проверить.

    var YRS = UILabel()
    var yrs = 1

    var DAY = UILabel()
    var day = 3

    var HRS = UILabel()
    var hrs = 5

    var SEC = UILabel()
    var sec = 35

    var MIN = UILabel()
    var min = 15

    YRS.text = "years \(yrs)"
    YRS.sizeToFit()
    view.addSubview(YRS)

    DAY.text = "day \(day)"
    DAY.sizeToFit()
    DAY.frame.origin.y = 30
    view.addSubview(DAY)

    HRS.text = "HRS \(hrs)"
    HRS.sizeToFit()
    HRS.frame.origin.y = 60
    view.addSubview(HRS)

    MIN.text = "min \(day)"
    MIN.sizeToFit()
    MIN.frame.origin.y = 90
    view.addSubview(MIN)

    SEC.text = "SEC \(sec)"
    SEC.sizeToFit()
    SEC.frame.origin.y = 120
    view.addSubview(SEC)

    Timer.scheduledTimer(withTimeInterval: 0.1, repeats: true) { (timer) in
        sec = sec - 1
        if sec < 0 { sec = 59
            min = min - 1
            if min < 0 { min = 59
                hrs = hrs - 1
                if hrs < 0 {
                    hrs = 23
                    HRS.text = "HRS \(hrs)"
                    HRS.sizeToFit() 
// add code here for day ...
                }
            }
            MIN.text = "min \(min)"
            MIN.sizeToFit()
        }
        SEC.text = "sec \(sec)"
        SEC.sizeToFit()
    }
...