Обновлять индикатор выполнения каждые миллисекунды - PullRequest
0 голосов
/ 16 января 2019

Я хочу, чтобы индикатор выполнения обновлялся каждые миллисекунды. Как бы я это сделал? В настоящее время он обновляется каждую секунду, а это не то, что я хочу.

РЕДАКТИРОВАТЬ: Извините, я забыл упомянуть, что я все еще хочу, чтобы метка таймера обновлялась каждую секунду (поэтому он будет уменьшаться на секунды, а не на миллисекунды: 10, 9, 8) при обновлении индикатора выполнения каждые миллисекунды или 25 раз каждые второй.

Код:

 progressBar.transform = progressBar.transform.scaledBy(x: 1, y: 5)
        progressBar.layer.cornerRadius = 5
        progressBar.clipsToBounds = true
        progressBar.layer.sublayers![1].cornerRadius = 5
        progressBar.subviews[1].clipsToBounds = true

func startTimer() {

    timer = Timer.scheduledTimer(timeInterval: 1.0, target: self, selector: #selector(timerUpdate), userInfo: nil, repeats: true)

}

@objc func timerUpdate() {

    if timeRemaining <= 0 {
        progressBar.setProgress(Float(0), animated: false)
        bonusTimerLabel.text = "0"
        bonusTimerLabel.textColor = UIColor(red: 186/255, green: 16/255, blue: 16/255, alpha: 1)

    } else {
        progressBar.setProgress(Float(timeRemaining)/Float(10), animated: false)
        timeRemaining -= 1
        bonusTimerLabel.text = "\(timeRemaining)"
    }

Ответы [ 2 ]

0 голосов
/ 16 января 2019

1 миллисекунда равна 0,001 секунде. Поэтому измените свойство timerInterval в timer на 0,001:

timer = Timer.scheduledTimer(timeInterval: 0.001, target: self, selector: #selector(timerUpdate), userInfo: nil, repeats: true)
0 голосов
/ 16 января 2019

Запуск функции с timer каждую миллисекунду не рекомендуется, ссылка: https://stackoverflow.com/a/30983444/8447312

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

Также убедитесь, что timeRemaining является Double, а затем просто попробуйте:

func startTimer() {

    timer = Timer.scheduledTimer(timeInterval: 0.050, target: self, selector: #selector(timerUpdate), userInfo: nil, repeats: true)

}

@objc func timerUpdate() {

    if timeRemaining <= 0 {
        progressBar.setProgress(Float(0), animated: false)
        bonusTimerLabel.text = "0"
        bonusTimerLabel.textColor = UIColor(red: 186/255, green: 16/255, blue: 16/255, alpha: 1)

    } else {
        progressBar.setProgress(Float(timeRemaining)/Float(20), animated: false)
        timeRemaining -= 0.050
        bonusTimerLabel.text = "\(Int(timeRemaining))"
    }
...