如何用另一个 NSTimer 停止 NSTimer?

Posted

技术标签:

【中文标题】如何用另一个 NSTimer 停止 NSTimer?【英文标题】:How to stop NSTimer with another NSTimer? 【发布时间】:2015-12-31 16:40:51 【问题描述】:

注意:我在这个项目中使用 swift。

我目前正在处理我的第一个项目,如果在一定时间后未按下按钮,我正在尝试停止(无效)NSTimer。我已经找到了停止我的 NSTimer 的其他方法,但没有人说如何在一定时间后停止它,如果实际按下按钮 则重置该时间。阅读所有内容以更清楚地理解。

这是我的代码;

@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 秒后更改文本之前按下)。

附言。对不起,代码很长,我认为这是必要的。 :-)

【问题讨论】:

你想使用 NSNotifications。我会链接你苹果文档。基本上你必须设置你的类,我假设一个视图控制器,将它添加为通知的观察者,然后发送或“发布”该通知,如果计时器自最后一次按下按钮后倒计时这么多秒。 developer.apple.com/library/mac/documentation/Cocoa/Reference/… - 仔细阅读并确保在您的应用使用计时器完成后将自己移除为观察者。 我很抱歉@MatthewLawrenceBailey,但我不明白我将如何使用它来阻止其他 NSTimer?感谢您的耐心和帮助:-) 【参考方案1】:

有不同的方法可以做到这一点。一种方法是,您可以在按下按钮时将 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 秒计时器无效。

【讨论】:

我注意到您是专家,但是,我对 Bool 和 Booleans 不是很熟悉。如果你愿意花时间告诉我你在我的编码中使用第二个 30 秒计时器和布尔/布尔值是什么意思,我将永远感激不尽。 @boidkan

以上是关于如何用另一个 NSTimer 停止 NSTimer?的主要内容,如果未能解决你的问题,请参考以下文章

如何在选择器成功之前调用 NSTimer [重复]

如何停止 NSTimer

如果某个动作正在运行,如何设置 NSTimer 停止?

NSTimer 几秒钟后停止

NSTimer 导致崩溃

UITableView 单元重用导致 NSTimer 问题