我不是母语为英语的人,我正在和翻译一起写作。 我想让你了解上下文是否很奇怪。
我的问题是, 按下按钮时,定时器工作,但切换视图时,定时器不工作。
我想知道即使视图发生变化,如何维护计时器。
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)
}
}
}
答案 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) {}