Swift中的倒计时器在应用程序关闭后继续运行

时间:2018-03-29 23:04:13

标签: ios swift

我正在开发社交媒体应用,我需要实现一个即使应用完全关闭后仍会继续运行的倒数计时器。基本上究竟Snapchat中的Snaps表现如何。有没有办法可以在应用程序中执行此操作,还是需要从包含应用程序记录,用户,朋友等的数据库中完成此操作?我对Swift很新,我使用的是Swift 4,所以请保留Swift 3/4的答案。

谢谢!

1 个答案:

答案 0 :(得分:2)

要问自己一个好问题是,是否需要Timer,或者只是存储一个开始Date,然后计算与存储的开始Date相比的当前时间和检查它是否超过倒计时时间。如果你想在UI中演示一个倒计时器,类似于在Snapchat中消失的消息,那么以下简单示例可能会有所帮助:

let allowableViewTimeInterval = TimeInterval(10) // 10 Seconds
let refreshTimeInterval = TimeInterval(1) // 1 Second refresh time on the label
let snapOpenedDate = Date() // the date they opened the snap

let label = UILabel(frame: .zero) // a label to display the countdown

let timer = Timer.scheduledTimer(withTimeInterval: refreshTimeInterval, repeats: true) {
    let currentDate = Date()
    let calendar = Calendar.current
    let dateComponents = calendar.components(CalendarUnit.CalendarUnitSecond, fromDate: snapOpenedDate, toDate: currentDate, options: nil)
    let seconds = dateComponents.second
    label.text = "\(seconds)"
}

// If the countdown finishes or a user leaves the snap we need to make sure we invalidate the timer.
timer.invalidate()

然后,您可以通过存储snapOpenedDate并在应用程序从后台恢复时再次查找它来使其适应您的解决方案。