Swift 4 - 在未来的精确时钟时间启动定时器

时间:2018-01-27 22:40:36

标签: ios swift timer

我一直坚持这个并寻找答案。

我想要一个计时器在将来的确切时间开始。这是场景:

  1. 用户使用日期选择器选择时间。说他选择晚上9点
  2. 现在是下午3:45,所以计时器应该在5小时15分钟内启动。
  3. 如何在正确的时间启动计时器?
  4. 非常感谢任何帮助。

2 个答案:

答案 0 :(得分:1)

不,在iOS中无法做到这一点。用户停止使用后,应用程序会很快停止(切换到另一个应用程序或锁定设备。)暂停意味着您没有获得任何CPU时间,并且可以在此之后的任何时间终止,而无需进一步警告。

除非在非常特殊的情况下(如果您是转弯导航应用或音乐播放应用),您才可以在后台运行几分钟。

如果你当时正在运行,你只能在特定时刻启动计时器,而你没有办法实现这一点。

我能想到的最好的方法是在所需的时间设置本地通知。这将向用户显示一条消息,让用户点击打开您的应用或关闭通知。如果用户点击打开您的应用,那么您将有机会启动计时器。

答案 1 :(得分:0)

是的,有一种使用UNUserNotifications进行此操作的方法。看起来像这样:

let requiredComponents: Set<Calendar.Component> = [.year, .month, .day, .hour, .minute, .second]
let components = Calendar.current.dateComponents(requiredComponents, from: viewing!.endTime)
let trigger = UNCalendarNotificationTrigger(dateMatching: components, repeats: false)
            
let request = UNNotificationRequest(identifier: "viewing\(viewing!.viewingID)", content: content, trigger: trigger)
            
UNUserNotificationCenter.current().add(request) { (error) in
}