如何用另一个 NSTimer 停止 NSTimer?
How to stop NSTimer with another NSTimer?
注意:我正在为这个项目使用 swift。
我目前正在处理我的第一个项目,如果在一定时间后没有按下按钮,我会尝试停止(使)NSTimer。我找到了停止我的 NSTimer 的其他方法,但 none 说明了如何在一定时间后停止它,如果按钮实际上 被按下 则该时间将被重置。阅读所有内容以更清楚地理解。
这是我的代码;
@IBOutlet var Text: UILabel!
var timer: NSTimer!
var countdown: Int = 0
@IBAction func StartGame(sender: AnyObject) {
self.countdown = 20
self.timer = NSTimer.scheduledTimerWithTimeInterval(1.5, target: self, selector: "updateCountdown", userInfo: nil, repeats: true)
}
func updateCountdown() {
self.countdown--
if self.countdown == 0 {
self.timer.invalidate()
self.timer = nil
}
let texts: NSArray = ["Test", "Testing"]
let range: UInt32 = UInt32(texts.count)
let randomNumber = Int(arc4random_uniform(range))
let textstring = texts.objectAtIndex(randomNumber)
self.ColorText.text = textstring as? String
}
@IBAction func PlayerbuttonPRESSED(sender: AnyObject) {
if Text.text == "Test" {
//Something happens
}
if Text.text == "Testing" {
//Something happens
}
我非常想知道的是,如果在 ColorText.text 更改之前 未按下 按钮,我将如何让其他事情发生! (如果在 1.5 秒后更改文本之前按下按钮 而不是 )。
Ps。很抱歉代码很长,我认为这是必要的。 :-)
有多种方法可以做到这一点。一种方法是,您可以在按下按钮时将 bool 值设置为 true,然后在 updateCountdown
中检查布尔值。
例如:
func updateCountdown() {
self.countdown--
if self.countdown == 0 && YOUR_BUTTON_BOOL {
self.timer.invalidate()
self.timer = nil
}
let texts: NSArray = ["Test", "Testing"]
let range: UInt32 = UInt32(texts.count)
let randomNumber = Int(arc4random_uniform(range))
let textstring = texts.objectAtIndex(randomNumber)
self.ColorText.text = textstring as? String
}
但是,以这种方式使用 NSTimer,让它在 1.5 秒之类的短时间内触发可能会变得不准确。定时器触发 20 次后,过去的时间将大于 30 秒。如果准确性很重要,您最好将第二个计时器设置为 30 秒。如果按下按钮,它会使 30 秒计时器无效,如果 30 秒计时器触发,它会使 1.5 秒计时器无效。
注意:我正在为这个项目使用 swift。
我目前正在处理我的第一个项目,如果在一定时间后没有按下按钮,我会尝试停止(使)NSTimer。我找到了停止我的 NSTimer 的其他方法,但 none 说明了如何在一定时间后停止它,如果按钮实际上 被按下 则该时间将被重置。阅读所有内容以更清楚地理解。
这是我的代码;
@IBOutlet var Text: UILabel!
var timer: NSTimer!
var countdown: Int = 0
@IBAction func StartGame(sender: AnyObject) {
self.countdown = 20
self.timer = NSTimer.scheduledTimerWithTimeInterval(1.5, target: self, selector: "updateCountdown", userInfo: nil, repeats: true)
}
func updateCountdown() {
self.countdown--
if self.countdown == 0 {
self.timer.invalidate()
self.timer = nil
}
let texts: NSArray = ["Test", "Testing"]
let range: UInt32 = UInt32(texts.count)
let randomNumber = Int(arc4random_uniform(range))
let textstring = texts.objectAtIndex(randomNumber)
self.ColorText.text = textstring as? String
}
@IBAction func PlayerbuttonPRESSED(sender: AnyObject) {
if Text.text == "Test" {
//Something happens
}
if Text.text == "Testing" {
//Something happens
}
我非常想知道的是,如果在 ColorText.text 更改之前 未按下 按钮,我将如何让其他事情发生! (如果在 1.5 秒后更改文本之前按下按钮 而不是 )。
Ps。很抱歉代码很长,我认为这是必要的。 :-)
有多种方法可以做到这一点。一种方法是,您可以在按下按钮时将 bool 值设置为 true,然后在 updateCountdown
中检查布尔值。
例如:
func updateCountdown() {
self.countdown--
if self.countdown == 0 && YOUR_BUTTON_BOOL {
self.timer.invalidate()
self.timer = nil
}
let texts: NSArray = ["Test", "Testing"]
let range: UInt32 = UInt32(texts.count)
let randomNumber = Int(arc4random_uniform(range))
let textstring = texts.objectAtIndex(randomNumber)
self.ColorText.text = textstring as? String
}
但是,以这种方式使用 NSTimer,让它在 1.5 秒之类的短时间内触发可能会变得不准确。定时器触发 20 次后,过去的时间将大于 30 秒。如果准确性很重要,您最好将第二个计时器设置为 30 秒。如果按下按钮,它会使 30 秒计时器无效,如果 30 秒计时器触发,它会使 1.5 秒计时器无效。