我需要创建计时器,它将继续在后台状态下运行,并在应用程序进入前景状态后更新UI。 最合适的例子是QuizClash app:
我有以下2个想法:
beginbackgroundTaskWithExpirationHandler
怀疑:如果主计时器在后台状态下过期,UI更新将不会显示(?)
恢复状态
怀疑:它是否是一个可行的选择,因为我没有经验,暂时不能尝试?
如果您有任何其他想法,或者可以在上述2中指出我,如果您曾在莫斯科,我会喝啤酒:)
答案 0 :(得分:2)
计时器的用途是什么?
如果要触发UI更改,尝试让它“在后台运行”是没有意义的,因为没有要更新的UI。
使用任何方法,您几乎肯定会想要使用时间戳...当应用程序返回到前台时,获取自上次时间戳以来经过的时间,根据需要更新UI,并重新启动Timer for foreground活动/更新。
答案 1 :(得分:1)
将UIApplicationDidBecomeActive的观察者添加到viewWillAppear中包含ProgressBar的ViewController:
NotificationCenter.default.addObserver(forName: NSNotification.Name.UIApplicationDidBecomeActive, object: nil, queue: nil, using: self.applicationBecameActive)
将它放在viewWillAppear中,因为applicationBecameActive函数只应在包含进度条的viewcontroller在应用程序再次激活时位于堆栈顶部时触发。
然后在applicationBecameActive方法中,确定ProgressBar的当前进度值应该是什么,相应地更新,然后重新启动ProgressBar进度。
func applicationBecameActive(notification: Notification){
//determine where the ProgressBar should be
//set the ProgressBar progress value
//restart the ProgressBar progress value updating
}
不要忘记在viewWillDissappear上删除观察者:
NotificationCenter.default.removeObserver(self, name: NSNotification.Name.UIApplicationDidBecomeActive, object: nil)