swift - 根据经过的实际秒数进行倒计时(像时钟一样)
问题描述
我需要创建一个从 30 到 0 的倒计时,当它到达 0 时,回到 30,我还需要秒与真实时钟相关,例如,如果我回到视图(即使如果我关闭了应用程序),我不应该看到倒计时总是从 30 开始,而是根据过去的时间应该在哪里(在 0-30 范围内)。
我得到的最接近的是以下内容:
let date = Date()
let calendar = Calendar.current
globalSeconds = calendar.component(.second, from: date)
print(globalSeconds)
实现的主要问题是基于 60 秒,而不是 30 秒。这个示例的值是递增的,我需要它们递减。
解决方案
您可以在未来 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
推荐阅读
- reporting-services - 如何将公式从 SSRS 转换为 Power BI
- sapui5 - UI5 使用@ui5/cli 缩小和丑化
- hybris - SAP Hybris 促销设置中的 KIE 是什么?
- swift - Vapor 4 可以在同一个应用程序中同时处理 HTTP 和 HTTPS 请求吗?
- php - 从 Homestead (v12.5.0) 中删除过时的 php 版本
- elasticsearch - 如何在不使用排序的情况下在 Elasticsearch 底部获取一些文档?
- arrays - 有没有办法比较两个数组并返回具有相同索引的公共元素的新数组?
- python - 如何读取具有与类似列名列表匹配的列的csv文件(不是确切的列名)
- javascript - 执行 POST 请求中的函数后,Node.js 将用户重定向到另一个页面
- node.js - 是否可以将相同的变量传递给 Node.js 中的所有渲染语句?