我正在开发社交媒体应用,我需要实现一个即使应用完全关闭后仍会继续运行的倒数计时器。基本上究竟Snapchat中的Snaps表现如何。有没有办法可以在应用程序中执行此操作,还是需要从包含应用程序记录,用户,朋友等的数据库中完成此操作?我对Swift很新,我使用的是Swift 4,所以请保留Swift 3/4的答案。
谢谢!
答案 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并在应用程序从后台恢复时再次查找它来使其适应您的解决方案。