我需要创建一个从30到0的倒计时,当倒数到0时,倒回到30,我还需要将秒数与实际时钟相关,例如,如果我返回到视图(即使我关闭了该应用程序),我也不应该看到倒数总是从30开始,而是根据过去的时间应该在(0-30之间)。
我得到的最接近的是:
let date = Date()
let calendar = Calendar.current
globalSeconds = calendar.component(.second, from: date)
print(globalSeconds)
实现的主要问题是基于60秒而不是30秒的。在此示例中,值是递增的,我需要将其递减。
答案 0 :(得分:0)
您可以在30秒后创建一个日期对象。 然后将当前日期与该对象进行比较,以确定计时器应该在哪里。
我是在操场上做的,您需要根据您的特定要求对其进行修改。
let futureDate = Date().addingTimeInterval(30).timeIntervalSince1970
var secondsLeft = TimeInterval(30)
Timer.scheduledTimer(withTimeInterval: 1, repeats: true) { timer in
secondsLeft = futureDate - Date().timeIntervalSince1970
print(secondsLeft)
if secondsLeft <= 0 {
timer.invalidate()
}
}
输出也需要清理
28.993669986724854
27.993721961975098
26.994149923324585
25.993762016296387
24.993871927261353
23.99389910697937
22.993980169296265
21.99391198158264
20.994942903518677
19.9939968585968
18.995089054107666
17.994417905807495
16.994072198867798
15.994122982025146
14.994197130203247
13.994181871414185
12.99530816078186
11.99462604522705
10.994287014007568
9.994328022003174
8.99430799484253
7.995084047317505
6.994402170181274
5.99443793296814
4.995491027832031
3.9945170879364014
2.9945571422576904
1.9946701526641846
0.9946119785308838
-0.005316019058227539