为了提供一些上下文,我正在处理的应用程序允许用户沿时间线记录一系列事件。我们从beta测试者那里得到的一个重要反馈是,当用户在录制时退出应用程序时,他们希望计时器能够在一段时间内保持最新状态。
例如,如果用户录制了5分钟,然后离开应用程序检查电子邮件20秒,则计时器应为5:20,但实际上仍为5分钟。
所以我们已经修复了 - 应用程序现在显示为5:20,这在后台工作。
然而,我们无法找到一种方法在一定时间后停止它。如果应用程序在后台运行很短的时间,用户可能希望计时器恢复,但是如果你将它留在后台30分钟,计时器将会更新,我希望能够给出用户可选的截止时间,以便应用程序在一段时间后暂停。
我已经尝试过收听UIApplicationDelegate通知,但问题是我正在寻找applicationDidEnterBackground:和applicationWillTerminate之间的一个点,但遗憾的是没有什么可以满足我的需求。
总而言之,我希望applicationWillResignActive有一个30-60秒的宽限期:以确定是否暂停计时器,或让它继续运行。
这可能吗?
提前致谢
答案 0 :(得分:2)
假设您的应用将在后台运行通常是一个坏主意。
考虑它的更好方法IMO将在applicationDidEnterBackground:
中将变量设置为当前时间,并在applicationWillBecomeActive:
中检查到现在的时间间隔:
答案 1 :(得分:0)
使用dispatch_after
在一定秒数后执行一段代码:
int64_t delay = 30.0; // In seconds
dispatch_time_t time = dispatch_time(DISPATCH_TIME_NOW, delay * NSEC_PER_SEC);
dispatch_after(time, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0ull), ^(void){
//DO SOMETHING
});
答案 2 :(得分:0)
Swift 3.0 Xcode 8.0代码示例:
Using delegate methods : applicationWillBecomeActive & applicationWillResignActive to capture the time in between.
OR
let deadlineTime = DispatchTime.now() + .seconds(30)
DispatchQueue.main.asyncAfter(deadline: deadlineTime) {
alert.dismiss(animated: true, completion: nil)
}
希望这有帮助。