我的计时器在后台模式下运行良好;-)我将didEnterBG tTime保存在Userdefaults中并计算WillEnterForeground中的differenz。
timer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(updateTimer), userInfo: nil, repeats: true)
我的应用程序以TABBAR-VC开头,而不是通过NAVIGATION-VC更深入
现在,如果我启动计时器并在TABBAR-VC之间切换,则timerable会更新 - 但是如果我使用NAVIGATION-VC中的BACK按钮并稍后返回,则timerlable获得默认时间 - 没有更新动作,但计时器仍处于活动状态(从debuger输出)。
那么缺少什么 - VC知道他必须再次更新标签?
@objc func updateTimer() {
if seconds == MY_TIME {
print("savePoints")
savePoints()
}
if seconds == 1 {
self.playSound()
}
if seconds < 1 {
clearTimer()
saveAndReload()
print("Aufgabe beendet")
btPauseTimer.isEnabled = false
btStopTimer.isEnabled = false
btPauseTimer.setTitle("--", for: UIControlState.normal)
btStopTimer.setTitle("--", for: UIControlState.normal)
} else {
seconds -= 1
timerLabel.text = timeString(time: TimeInterval(seconds))
}
}
答案 0 :(得分:0)
自己动手; - )
我在Controller.swift类之外声明了我需要的所有VAR(计时器等......) 如果计时器正在运行并且我回到这个VC - 我在viewAppears中调用updateLabel()。这个updateLabel方法是另一个计划的计时器,就像另一个obove一样,每隔一秒调用一个方法newString(); - )
timerLabel.text = timeString(time: TimeInterval(seconds))
修改强> 这个解决方案对我来说是正确的方式(我希望如此......; - )
@objc func updateLabel(){
if isBasicTimerRunning{
timerLabel!.text = timeString(time: TimeInterval(secondsBasic))
perform(#selector(updateLabel), with: nil, afterDelay: 0.01)
}else{
NSObject.cancelPreviousPerformRequests(withTarget: self)
}
}
执行#relector在我的计时器运行期间勾选相同的方法 - 如果不是,则取消勾选。