我正在尝试找出一种在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()
}
}
}