我正在创建倒数计时器并在倒数计时器模式下使用UIDatePicker
。当使用countDownDuration
作为TimeInterval时,1分钟并不意味着60秒。我已经看到它是85,108,62,75秒。
这是一个来自Storyboard的漂亮的UIDatePicker,发生了什么?
以下是我的代码。
import UIKit
class SleepTimerViewController: UIViewController {
@IBOutlet weak var timePicker: UIDatePicker!
@IBOutlet weak var timerButton: UIButton!
var radio = Radio.sharedInstance
var timeRemaining = UILabel()
var countdownView = UIView()
var sleepTime = 0.0 {
didSet {
print(sleepTime)
}
}
var timer: Timer?
var timerIsRunning = false
override func viewDidLoad() {
super.viewDidLoad()
setupView()
// Do any additional setup after loading the view.
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
private func startTimer() {
print("startTimer")
sleepTime = timePicker.countDownDuration
timer = Timer.scheduledTimer(timeInterval: 1.0, target: self, selector: #selector(updateTimer), userInfo: nil, repeats: true)
countdownView.isHidden = false
timerIsRunning = true
timerButton.titleLabel?.text = "Stop"
timeRemaining.text = timeString(sleepTime)
}
@objc private func updateTimer() {
print("updateTimer")
if sleepTime != 0.0 {
sleepTime -= 1
timeRemaining.text = timeString(sleepTime)
}
else {
timer?.invalidate()
countdownView.isHidden = true
timerIsRunning = false
// timerButton.titleLabel?.text = "Start"
}
}
private func timeString(_ time: TimeInterval) -> String {
let hours = Int(time) / 3600
let minutes = Int(time) / 60 % 60
let seconds = Int(time) % 60
return String(format:"%02i:%02i:%02i", hours, minutes, seconds)
}
private func setupView(){
countdownView.frame = timePicker.frame
countdownView.center = timePicker.center
countdownView.backgroundColor = UIColor.white
countdownView.bounds = timePicker.frame
timeRemaining.backgroundColor = UIColor.clear
timeRemaining.textColor = UIColor.black
timeRemaining.bounds = countdownView.bounds
timeRemaining.center = countdownView.center
timeRemaining.font = UIFont(name: "System", size: 60)
timeRemaining.adjustsFontSizeToFitWidth = true
timeRemaining.text = ""
countdownView.addSubview(timeRemaining)
timePicker.addSubview(countdownView)
countdownView.isHidden = true
}
@IBAction func timerButton(_ sender: UIButton) {
startTimer()
}
@IBAction func timePicker(_ sender: UIDatePicker) {
print(timePicker.countDownDuration)
}
}