Сделать обратный отсчет на основе реальных секунд, прошедших (как часы) - PullRequest
0 голосов
/ 13 июня 2019

Мне нужно создать обратный отсчет, который идет от 30 до 0, а когда он достигает 0, возвращаюсь к 30, также мне нужно, чтобы секунды были относительно реальных часов, например, если я вернусь к просмотр (даже если я закрыл приложение), я не должен видеть отсчет всегда начиная с 30, вместо того, где он должен быть (в диапазоне 0-30) в зависимости от времени, которое прошло.

Самое близкое, что я получил, это:

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

Основная проблема заключается в том, что реализация основана на 60 секундах, а не на 30. И значения для этого примера увеличиваются, и мне нужно, чтобы они уменьшались.

1 Ответ

0 голосов
/ 13 июня 2019

Вы можете создать объект даты через 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...