加载视图时启动 NSTimer
Start a NSTimer when view loads
我想制作一个简单的时钟应用程序,冒号会闪烁以使其看起来更好。到目前为止我的代码是:
@IBOutlet weak var clockLabel: UILabel!
var timerRunning = true
var timer = NSTimer()
var OnOff = 0
var colon = ":"
var hour = 0
var minute = 0
override func viewDidLoad() {
super.viewDidLoad()
clockLabel.text = ("\(hour)\(colon)\(minute)")
timer = NSTimer.scheduledTimerWithTimeInterval(1, target: self, selector: "Counting", userInfo: nil, repeats: true)
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
func Counting(){
if OnOff == 1 {
OnOff = 0
colon = ":"
clockLabel.text = ("\(hour)\(colon)\(minute)")
}
if OnOff == 0 {
OnOff = 1
colon = ""
clockLabel.text = ("\(hour)\(colon)\(minute)")
}
}
我希望它的工作方式是计时器在视图加载的那一刻开始。我不想按下按钮让冒号开始闪烁。
提前致谢
我没有发现您的计时器有任何问题(您的问题标题另有说明),据我所知它应该在视图加载后每秒触发一次。
我注意到的一件事是您的代码执行路径中存在一个问题:
如果您更改变量(在第一个中),则两个后续 if 语句会重叠,因此请继续阅读以查看我的解决方案。
我会做一点改进——因为 OnOff
变量在本质上似乎是二进制的——让我们把它变成一个布尔类型:
var colonShown : Bool = false // this is your "OnOff" variable (changed it to be more clear to the reader + made it boolean (you treat it as a boolean, so why not make it boolean?))
然后,在你的计时函数中(我将其重命名为tick()
):
// renamed your Counting() function, no particular reason for that (sorry if that causes confusion) -- you can replace your Counting() function with this one (also make sure to update your timer selector that references the "Counting()" function on each "tick")
func tick(){
colonShown = !colonShown // toggle boolean value
colon = colonShown ? ":" : "" // neat one-liner for your if statement
clockLabel.text = ("\(hour)\(colon)\(minute)")
}
我想制作一个简单的时钟应用程序,冒号会闪烁以使其看起来更好。到目前为止我的代码是:
@IBOutlet weak var clockLabel: UILabel!
var timerRunning = true
var timer = NSTimer()
var OnOff = 0
var colon = ":"
var hour = 0
var minute = 0
override func viewDidLoad() {
super.viewDidLoad()
clockLabel.text = ("\(hour)\(colon)\(minute)")
timer = NSTimer.scheduledTimerWithTimeInterval(1, target: self, selector: "Counting", userInfo: nil, repeats: true)
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
func Counting(){
if OnOff == 1 {
OnOff = 0
colon = ":"
clockLabel.text = ("\(hour)\(colon)\(minute)")
}
if OnOff == 0 {
OnOff = 1
colon = ""
clockLabel.text = ("\(hour)\(colon)\(minute)")
}
}
我希望它的工作方式是计时器在视图加载的那一刻开始。我不想按下按钮让冒号开始闪烁。 提前致谢
我没有发现您的计时器有任何问题(您的问题标题另有说明),据我所知它应该在视图加载后每秒触发一次。
我注意到的一件事是您的代码执行路径中存在一个问题: 如果您更改变量(在第一个中),则两个后续 if 语句会重叠,因此请继续阅读以查看我的解决方案。
我会做一点改进——因为 OnOff
变量在本质上似乎是二进制的——让我们把它变成一个布尔类型:
var colonShown : Bool = false // this is your "OnOff" variable (changed it to be more clear to the reader + made it boolean (you treat it as a boolean, so why not make it boolean?))
然后,在你的计时函数中(我将其重命名为tick()
):
// renamed your Counting() function, no particular reason for that (sorry if that causes confusion) -- you can replace your Counting() function with this one (also make sure to update your timer selector that references the "Counting()" function on each "tick")
func tick(){
colonShown = !colonShown // toggle boolean value
colon = colonShown ? ":" : "" // neat one-liner for your if statement
clockLabel.text = ("\(hour)\(colon)\(minute)")
}