视图更改后,计时器终止

时间:2017-01-09 00:33:27

标签: swift swift3 view timer

我不是母语为英语的人,我正在和翻译一起写作。 我想让你了解上下文是否很奇怪。

我的问题是, 按下按钮时,定时器工作,但切换视图时,定时器不工作。

我想知道即使视图发生变化,如何维护计时器。

var time : Int = 0
var onehour : Int = 60
var timer = Timer()
@IBAction func pressSuncream(_ sender: Any) { // Suncream 버튼
    useSuncream.setImage(UIImage(named: "test"), for: UIControlState.normal)

    if #available(iOS 10.0, *) {
        let content = UNMutableNotificationContent()
        content.title = "hello"
        content.body = "timer"
        content.badge = 1

        let trigger = UNTimeIntervalNotificationTrigger(timeInterval: 3600, repeats: false)
        let request = UNNotificationRequest(identifier: "timerdone", content: content, trigger: trigger)
        UNUserNotificationCenter.current().add(request, withCompletionHandler: nil)

        timer = Timer.scheduledTimer(timeInterval: 1.0, target: self, selector: #selector(QuestView.updatetime), userInfo: nil, repeats: true)


    } else {
        // Fallback on earlier versions
    }
}

func updatetime() {
    time += 1
    if time == 60 {
        time = 0
        onehour -= 1
        DispatchQueue.main.async {
            self.suncreamTime.text = String(self.onehour)
        }
    }
}

2 个答案:

答案 0 :(得分:0)

您可以这样做的一种方法是使计时器变量全局化。这可能是一个"脏"这样做的方式,如果真的有这种可怕的后果,有人让我知道,我会把它拿下来。

基本上你需要做的就是在任何类之外定义它,如:

var timer: NSTimer?
class MyClass: UIViewController {
    ...
}

这样您就可以从任何文件中访问它。我会说,除非你必须这样做,否则你通常不会这样做,所以它更像是最后的选择。

答案 1 :(得分:0)

当您切换到mainView时,您可以将onehour的值存储在UserDefaults的{​​{1}}。 当你进入timerView时,你可以获得override func viewWillDisappear(_ animated: Bool) { }

的值

例如:

override func viewWillAppear(_ animated: Bool) {}