【发布时间】:2023-03-14 10:21:01
【问题描述】:
好的,我正在开发一个倒数计时器功能,作为我正在开发的应用程序的一部分。在如何实现计时器以及它在屏幕上的显示方式方面,我遇到了一些问题。我的两个问题是,
- 现在我只有能够倒计时的计时器。计时器将 总是有一个固定的 10 分钟倒计时时间。
- 我有两个单独的计时器标签,因为我希望它们以不同的方式显示 在屏幕上。是否可以将分钟和秒变量推送到显示屏上的单独标签?
如果有什么我没有说清楚的,尽管问。
import UIKit
class ViewController: UIViewController {
//MARK: - Countdown Timer Connections
@IBOutlet weak var minuteLabel: UILabel!
@IBOutlet weak var secondLabel: UILabel!
//MARK: - Seed Connections
@IBOutlet weak var seedSlot1: UIImageView!
@IBOutlet weak var seedSlot2: UIImageView!
@IBOutlet weak var seedSlot3: UIImageView!
@IBOutlet weak var seedSlot4: UIImageView!
//MARK: - Start/Pause Button Connection
@IBOutlet weak var startButton: UIButton!
@IBOutlet weak var stopButton: UIButton!
@IBOutlet weak var pauseButton: UIButton!
//MARK: - Variables
var timer = Timer()
var isTimerRunning : Bool = false
var resumeTapped: Bool = false
var minutes : Int = 24
var seconds: Int = 10
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
pauseButton.setImage(nil, for: .normal)
stopButton.setImage(nil, for: .normal)
}
//MARK: Timer Control Functions
//MARK: - Start Timer
@IBAction func startTimer(_ sender: UIButton) {
if isTimerRunning == false {
isTimerRunning = true
setButtons()
timer = Timer.scheduledTimer(
timeInterval: 1,
target: self,
selector: (#selector(ViewController.updateTimer)),
userInfo: nil,
repeats: true
)
print("The timer is currently running: \(isTimerRunning)")
} else {
isTimerRunning = false
setButtons()
print("The timer is currently running: \(isTimerRunning)")
}
print(secondLabel.text)
}
//MARK: - Stop Timer
@IBAction func stopTimer(_ sender: UIButton) {
timer.invalidate()
isTimerRunning = false
seconds = 60
minuteLabel.text = "\(minutes)"
secondLabel.text = "\(seconds)"
setButtons()
}
//MARK: - Pause Timer
@IBAction func pauseTimer(_ sender: UIButton) {
if resumeTapped == false {
timer.invalidate()
isTimerRunning = false
setButtons()
} else {
startTimer(startButton)
isTimerRunning = true
setButtons()
}
}
func timeString (time:TimeInterval) -> String {
let secondValue = Int(time) & 60
let minuteValue = Int(time) / 60 % 60
return String(format: "%02i", minuteValue, secondValue)
}
//MARK: - Update Timer
@objc func updateTimer() {
seconds -= 1 //This will decrement(count down)the seconds.
secondLabel.text = timeString(time: TimeInterval(seconds)) //This will update the seconds text label
}
【问题讨论】:
-
没有单独的分钟和秒变量;使用单个“秒”变量。我还建议您使用
Date设置从now10 分钟,而不是减少秒数,因为Timer有抖动
标签: ios swift xcode timer nstimer