gpt4 book ai didi

ios - swift - 在 Controller 之间切换后更新计时器并更新标签

转载 作者:行者123 更新时间:2023-11-30 11:39:42 24 4
gpt4 key购买 nike

即使在后台模式下,我的计时器也能正常工作;-)我将 didEnterBG tTime 保存在 Userdefaults 中,并计算 WillEnterForeground 中的差异。

timer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(updateTimer), userInfo: nil, repeats: true)

我的应用程序从 TABBAR-VC 开始,然后通过 NAVIGATION-VC 深入

现在,如果我启动计时器并在 TABBAR-VC 之间切换,timerlable 就会更新得很好 - 但如果我使用 NAVIGATION-VC 中的“后退”按钮并稍后返回,timerlable 就会获得默认时间 - 没有更新操作,但计时器仍然处于事件状态(调试器的输出)。

那么缺少什么 - 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))
}

}

最佳答案

我自己得到的;-)

我在 Controller.swift 类之外声明了我需要的所有 VAR(计时器等...)如果计时器正在运行并且我返回到此 VC - 我在 viewAppears 内调用 updateLabel()。这个 updateLabel 方法是另一个预定的计时器,就像上面的另一个一样,每秒仅使用这一行调用一个方法 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)
}

}

只要我的计时器正在运行,执行#selector 勾选相同的方法 - 如果没有,则取消勾选。

关于ios - swift - 在 Controller 之间切换后更新计时器并更新标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49383597/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com