【发布时间】:2020-04-14 17:49:15
【问题描述】:
我在我的应用程序中实现了一个计数器,它可以工作。然后,当我更改 ViewController(当我运行我的应用程序时)时,我的计数器会自动重置为 0。我希望我的计数器在我使用该应用程序时继续运行。
感谢您的帮助:)
import UIKit
class ViewController: UIViewController
{
/// Label
private var customLabel : UILabel?
/// MAximum Count to which label will be Updated
private var maxCount : Int?
/// Count which is currently displayed in Label
private var currentCount : Int?
/// Timer To animate label text
private var updateTimer : Timer?
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
customLabel = UILabel()
customLabel?.textColor = .white
customLabel?.font = UIFont(name: "HelveticaNeue-Bold", size: 25)
customLabel?.textAlignment = .center
/// Add label to View
addConstraints()
/// Start Timer
DispatchQueue.main.async {
self.maxCount = 600
self.currentCount = 1
self.updateTimer = Timer.scheduledTimer(timeInterval: 0.2, target: self, selector: #selector(ViewController.updateLabel), userInfo: nil, repeats: true)
}
}
@objc func updateLabel() {
self.customLabel?.text = String(currentCount!)
currentCount! += 1
if currentCount! > maxCount! {
/// Release All Values
self.updateTimer?.invalidate()
self.updateTimer = nil
self.maxCount = nil
self.currentCount = nil
}
}
func addConstraints(){
/// Add Required Constraints
self.view.addSubview(customLabel!)
customLabel?.translatesAutoresizingMaskIntoConstraints = false
customLabel?.leftAnchor.constraint(equalTo: self.view.leftAnchor, constant: 195).isActive = true
customLabel?.trailingAnchor.constraint(equalTo: self.view.trailingAnchor, constant: -50).isActive = true
customLabel?.heightAnchor.constraint(equalToConstant: 50).isActive = true
customLabel?.topAnchor.constraint(equalTo: self.view.topAnchor, constant: 310).isActive = true
}
}
【问题讨论】:
-
您可以声明一个全局变量,也可以使用结构体来存储变量。检查我的答案。
-
也许每次你创建一个新的视图控制器(小心 - 可能存在内存泄漏)并且计数器重新开始。我已经用两个 ViewController(在它们之间切换)测试了您的代码 - 计数器继续工作。所以问题是视图控制器生命周期的实现,而不是计数器的实现
-
感谢@VadimNikolaev。你是对的,这是一个 ViewController 问题。我刚刚看到,对于我的一些 viewController,计数器会继续,但有些会重置为 0。我该如何解决这个问题?
-
@AlexisDecloedt 了解如何修复它 - 您需要查看创建已发布视图控制器(创建视图控制器的位置)的完整实现。仅供参考:使用强制展开存在应用程序崩溃的高风险,请尝试使用不同的选项来设置变量(例如,预定义变量,如
private let maxCount : Int = 600和private var currentCount : Int = 1 -
@VadimNikolaev 我在哪里可以找到创建视图控制器的确切位置? (对不起,我是初学者)。我看不出我的不同 ViewController 有什么区别:/
标签: swift xcode timer count reset