首页 > 解决方案 > 根据经过的实际秒数进行倒计时(像时钟一样)

问题描述

我需要创建一个从 30 到 0 的倒计时,当它到达 0 时,回到 30,我还需要秒与真实时钟相关,例如,如果我回到视图(即使如果我关闭了应用程序),我不应该看到倒计时总是从 30 开始,而是根据过去的时间应该在哪里(在 0-30 范围内)。

我得到的最接近的是以下内容:

let date = Date()
let calendar = Calendar.current
globalSeconds = calendar.component(.second, from: date)
print(globalSeconds)

实现的主要问题是基于 60 秒,而不是 30 秒。这个示例的值是递增的,我需要它们递减。

标签: swift

解决方案


您可以在未来 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

推荐阅读