【发布时间】:2021-01-23 03:32:21
【问题描述】:
我需要一个计时器来倒计时 6 小时。
.时间到了就必须重置
.它必须在按下按钮时激活。
.它必须在应用程序打开或关闭时继续运行。
我有一个日期倒计时计时器,还有另一个倒计时计时器,它只在应用程序处于活动状态时工作。
如何制作一个计时 6 小时的计时器?
定时器倒计时到日期⬇︎
var timeCount: NSDate?
var timer = Timer()
timer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(countdown), userInfo: nil, repeats: true)
@objc func countdown()
{
let endTime = "08-10-2020 18:00:00"
let formatter = DateFormatter()
formatter.dateFormat = "dd-MM-yyyy HH:mm:ss"
timeCount = (formatter.date(from: endTime))! as NSDate
let currentDate = Date()
let calendar = Calendar.current
let diffDateComponents = calendar.dateComponents([.hour, .minute, .second], from: currentDate, to: timeCount! as Date)
let countdown = "\(diffDateComponents.hour ?? 0):\(diffDateComponents.minute ?? 0):\(diffDateComponents.second ?? 0)"
let hourS = diffDateComponents.hour!
let minuteS = diffDateComponents.minute!
let secondS = diffDateComponents.second!
print(countdown)
if countdown == "0:0:0"
{
button.setTitle("PRESS", for: .normal)
button.backgroundColor = .green
timer.invalidate()
}
else
{
button.setTitle("PRESS WHEN TIME RUNS OUT" + "\n\(String(format: "%02d:%02d:%02d", hourS, minuteS, secondS))", for: .normal)
button.backgroundColor = .red
}
}
仅当应用程序处于活动状态时定时器倒计时⬇︎
var timer = Timer()
var hours = 06
var minutes = 00
var secs = 00
timer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(countdown), userInfo: nil, repeats: true)
@objc func countdown()
{
secs = secs-1
if (secs<0)
{
secs = 59
minutes=minutes-1
if (minutes<0)
{
minutes = 59
hours = hours-1
if (hours<0)
{
hours = 0
minutes = 0
secs = 0
timer.invalidate()
}
}
}
var hourp: String
var minutesp: String
var secp: String
if(hours<10)
{
hourp = "0" + String(describing: hours)
}
else
{
hourp = String(describing: hours)
}
if(minutes<10)
{
minutesp = "0" + String(describing: minutes)
}
else
{
minutesp = String(describing: minutes)
}
if(secs<10)
{
secp = "0" + String(describing: secs)
}
else
{
secp = String(describing: secs)
}
let timing = hourp + ":" + minutesp + ":" + secp
print(timing)
if hours == 0 && minutes == 0 && secs == 0
{
button.setTitle("PRESS", for: .normal)
button.backgroundColor = .green
else
{
button.setTitle("PRESS WHEN TIME RUNS OUT" + "\n\(timing)" , for: .normal)
button.backgroundColor = .red
}
}
【问题讨论】:
-
只保存在本地,最简单的UserDefaults,保存定时器开始计时的时间戳,然后在下次打开应用时,与实际日期时间戳比较,看看是否超过6小时,甚至看看它计算了多少次 x6 小时。
-
谢谢你的建议,我想我已经解决了????
标签: swift timer countdown nsdatecomponents