ios - swift:在标签中显示秒数。
问题描述
我有这个秒数:
var modeLight = [5,30,60,30,60,30]
我有计时器:
@IBOutlet weak var timerLabel: UILabel!
var seconds = 60
var timer = Timer()
var isTimerRunning = false
var resumeTapped = false
@IBAction func startAction(_ sender: UIButton) {
if isTimerRunning == false {
runTimer()
}
}
func runTimer() {
timer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: (#selector(MasterViewController.updateTimer)), userInfo: nil, repeats: true)
isTimerRunning = true
}
@objc func updateTimer() {
if seconds < 1 {
timer.invalidate()
//Send alert to indicate "time's up!"
} else {
seconds -= 1
timerLabel.text = timeString(time: TimeInterval(seconds))
}
}
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)
}
我想从中获取秒值modeLight
并将其显示在timerLabel
. 在第一个元素(例如5
)将过期后,我想显示下一个等。怎么做?
解决方案
您需要跟踪要使用的数组索引。
添加索引属性并初始化它
var modeLight = [5,30,60,30,60,30]
var timerIndex: Int
var timer: Timer!
updateTimer()
在你的函数中使用索引
func runTimer() {
timerIndex = 0
timer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: (#selector(MasterViewController.updateTimer)), userInfo: nil, repeats: true)
}
@objc func updateTimer() {
if seconds < 1 {
timerIndex += 1
if timerIndex >= modeLight.count { // to be safe
endTimer()
return
}
seconds = modeLight[timerIndex]
} else {
seconds -= 1
}
timerLabel.text = timeString(time: TimeInterval(seconds))
}
private func endTimer() {
timer.invalidate()
timerLabel.text = "00:00:00"
}
推荐阅读
- c# - Azure 表:如何编写范围查询来过滤分区键
- join - AWS Athena 的一个查询中是否有可能的连接路径?
- javascript - 当我在 Javascript 中将变量设置为 0 时页面不加载
- scala - 如何基于一个公共字段加入两个 rdds?
- react-native - ~/zshrc: 权限被拒绝
- javascript - $.get data 打印发送者的源代码
- python-3.x - 如何将代码复制到禁用复制和粘贴的在线 IDE?
- c# - 如何让我的动画状态管理器在统一 C# 中工作?
- flutter - beacon_broadcast颤振包中的错误代码2是什么意思?
- java - Tomcat servlet 上的 Firebase admin sdk