带有Swift中暂停和停止按钮的倒数计时器

时间:2020-07-01 15:20:28

标签: swift timer countdown countdowntimer

我正在尝试找出一种在Swift中创建倒数计时器的方法,以便我可以暂停,停止和继续。

这是我的代码:

@objc func updateTimer() {
    if secondsPassed < totalTime {
        secondsPassed += 1
        progressBar.progress = Float(secondsPassed) / Float(totalTime)
        
        let minutes = String(totalTime / 60)
        let seconds = String(totalTime % 60)
        countDownLabel.text = minutes + ":" + seconds
        totalTime -= 1
        
    } else {
        timer.invalidate()
        titleLabel.text = "Done!"
        
        let url = Bundle.main.url(forResource: "alarm_sound", withExtension: "mp3")
        player = try! AVAudioPlayer(contentsOf: url!)
        player.play()
    }
    
}

我已经有一个进度条,但是我无法正确设置倒数计时器。运行此代码时,我得到0:3而不是0:03。另一个问题是它不会在0:00停止。它只是在那之前冻结。

这是完整的代码:

import UIKit
import AVFoundation

class ViewController: UIViewController {
    
    @IBOutlet weak var progressBar: UIProgressView!
    @IBOutlet weak var titleLabel: UILabel!
    
    // testando countdownlabel
    @IBOutlet weak var countDownLabel: UILabel!
    
    let eggTimes = ["Soft": 3, "Medium": 4, "Hard": 5]
    var totalTime = 0
    var player: AVAudioPlayer!
    var secondsPassed = 0
    var timer = Timer()
    
    @IBAction func hardnessSelected(_ sender: UIButton) {
        
        timer.invalidate()
        let hardness = sender.currentTitle!
        totalTime = eggTimes[hardness]!
        progressBar.progress = 0.0
        secondsPassed = 0
        titleLabel.text = hardness
        
        timer = Timer.scheduledTimer(timeInterval: 1.0, target: self, selector: #selector(updateTimer), userInfo: nil, repeats: true)
    }
    
    @objc func updateTimer() {
        if secondsPassed < totalTime {
            secondsPassed += 1
            progressBar.progress = Float(secondsPassed) / Float(totalTime)
            
            let minutes = String(totalTime / 60)
            let seconds = String(totalTime % 60)
            countDownLabel.text = minutes + ":" + seconds
            totalTime -= 1
            
        } else {
            timer.invalidate()
            titleLabel.text = "Done!"
            
            let url = Bundle.main.url(forResource: "alarm_sound", withExtension: "mp3")
            player = try! AVAudioPlayer(contentsOf: url!)
            player.play()
        }   
    }   
}

0 个答案:

没有答案
相关问题