swift - 更新计时器并在控制器

时间:2018-03-20 11:56:39

标签: ios swift timer label countdown

我的计时器在后台模式下运行良好;-)我将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))
    }

}

1 个答案:

答案 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在我的计时器运行期间勾选相同的方法 - 如果不是,则取消勾选。