SWIFT: 倒计时从 3 到 0 更改标签
SWIFT: countdown from 3 to change label at 0
这是我的困境,我正在做一些非常简单的事情,只是在做一些发现。基本上,我有一个按钮和一个标签,我将按钮设置为从 3 倒数到 0,但我不显示 0,而是希望它停止倒计时,并显示一个字符串 "yes!"
这是我想出的一些代码。
class ViewController: UIViewController {
var myTimer: NSTimer = NSTimer()
var count: Int = 4
func startCountdown(){
myTimer = NSTimer.scheduledTimerWithTimeInterval(1, target: self, selector: #selector(myUpdate), userInfo: nil, repeats: true)
}
func myUpdate() {
if(count > 0) {
count -= 1
timerLabel.text = "\(count)"
}
}
func countdownReachedZero(){
if count == 1{
myTimer.invalidate()
timerLabel.text = "Yes!"
}
}
@IBOutlet weak var resultButtonOutlet: UIButton!
@IBOutlet weak var timerLabel: UILabel!
@IBAction func resultButton(sender: AnyObject) {
//button actions, starts countdown from 3-1
startCountdown()
}
override func viewDidLoad() {
super.viewDidLoad()
countdownReachedZero()
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
}
目前,我的结果只是 3-0 的倒计时,它完全忽略了来自 viewDidLoad 的 countdownReachedZero() 调用。
如果我在按钮内实现 countdownReachedZero() 方法,然后按下按钮,等待它达到 0,然后再次按下按钮,它会更改文本,但我不确定我哪里出错了。
我试过各种方法。我认为可行的方法是循环遍历一个字符串,该字符串只按顺序显示它们一段时间,但我对此也缺乏了解。
还有更简单的吗?我错过了什么吗?
如果你还需要什么,我可以提供。
问题是这个函数缺少了一半的逻辑:
func myUpdate() {
if(count > 0) {
count -= 1
timerLabel.text = "\(count)"
}
}
每次计时器触发时都会调用该代码。它说如果 count > 0
该怎么办,但是你完全忘记说在 count == 0
!
的关键情况下该怎么做
您只需要 myUpdate() 函数:
func myUpdate() {
if count > 0 {
count -= 1
timerLabel.text = "\(count)"
} else if count == 0 {
myTimer.invalidate()
timerLabel.text = "Yes!"
}
}
这是我的困境,我正在做一些非常简单的事情,只是在做一些发现。基本上,我有一个按钮和一个标签,我将按钮设置为从 3 倒数到 0,但我不显示 0,而是希望它停止倒计时,并显示一个字符串 "yes!"
这是我想出的一些代码。
class ViewController: UIViewController {
var myTimer: NSTimer = NSTimer()
var count: Int = 4
func startCountdown(){
myTimer = NSTimer.scheduledTimerWithTimeInterval(1, target: self, selector: #selector(myUpdate), userInfo: nil, repeats: true)
}
func myUpdate() {
if(count > 0) {
count -= 1
timerLabel.text = "\(count)"
}
}
func countdownReachedZero(){
if count == 1{
myTimer.invalidate()
timerLabel.text = "Yes!"
}
}
@IBOutlet weak var resultButtonOutlet: UIButton!
@IBOutlet weak var timerLabel: UILabel!
@IBAction func resultButton(sender: AnyObject) {
//button actions, starts countdown from 3-1
startCountdown()
}
override func viewDidLoad() {
super.viewDidLoad()
countdownReachedZero()
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
}
目前,我的结果只是 3-0 的倒计时,它完全忽略了来自 viewDidLoad 的 countdownReachedZero() 调用。 如果我在按钮内实现 countdownReachedZero() 方法,然后按下按钮,等待它达到 0,然后再次按下按钮,它会更改文本,但我不确定我哪里出错了。
我试过各种方法。我认为可行的方法是循环遍历一个字符串,该字符串只按顺序显示它们一段时间,但我对此也缺乏了解。
还有更简单的吗?我错过了什么吗?
如果你还需要什么,我可以提供。
问题是这个函数缺少了一半的逻辑:
func myUpdate() {
if(count > 0) {
count -= 1
timerLabel.text = "\(count)"
}
}
每次计时器触发时都会调用该代码。它说如果 count > 0
该怎么办,但是你完全忘记说在 count == 0
!
您只需要 myUpdate() 函数:
func myUpdate() {
if count > 0 {
count -= 1
timerLabel.text = "\(count)"
} else if count == 0 {
myTimer.invalidate()
timerLabel.text = "Yes!"
}
}