因此,我正在创建一个应用程序/游戏,您可以在计时器用尽并输掉之前点击与图片相对应的按钮。您需要1秒钟的时间轻按按钮,如果选择了正确的按钮,计时器将重置并出现新照片。我无法重置计时器。即使我尝试将其重置,它也会在一秒钟后触发。这是代码:

loadPicture()运行于viewDidLoad()

func loadPicture() {
    //check if repeat picture
    secondInt = randomInt
    randomInt = Int(arc4random_uniform(24))
    if secondInt != randomInt {
        pictureName = String(self.PicList[randomInt])
        image = UIImage(named: pictureName)
        self.picture.image = image
        timer.invalidate()
        resetTimer()

    }
    else{
        loadPicture()
    }
}

这是resetTimer()方法:
func resetTimer(){
        timer = NSTimer.scheduledTimerWithTimeInterval(1.0, target: self, selector: Selector("gameOverTimer"), userInfo: nil, repeats: false)

}

我认为这可能与NSRunloops有关?我不确定。老实说,我什至不知道NSRunloop是什么。

最佳答案

所以我终于想通了...

我必须创建一个单独的函数以通过初始化计时器来启动它。
在resetTimer()函数中,我添加了timer.invalidate()行。所以我的代码看起来像这样:

func loadPicture() {
    //check if repeat picture
    secondInt = randomInt
    randomInt = Int(arc4random_uniform(24))
    if secondInt != randomInt {
        pictureName = String(self.PicList[randomInt])
        image = UIImage(named: pictureName)
        self.picture.image = image
        resetTimer()

    }
    else{
        loadPicture()
    }
}
func startTimer(){
    timer = NSTimer.scheduledTimerWithTimeInterval(1.0, target: self, selector: Selector("gameOverTimer"), userInfo: "timer", repeats: true)
}

func resetTimer(){

    timer.invalidate()
    startTimer()
}

编辑

使用新的选择器语法,它看起来像这样:
func startTimer(){
    timer = NSTimer.scheduledTimerWithTimeInterval(1.0, target: self, selector: #selector(NameOfClass.startTimer), userInfo: "timer", repeats: true)
}

关于ios - 如何重置NSTimer? SWIFT代码,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31690634/

10-15 07:24