【问题标题】:How to reset NSTimer? swift code如何重置 NSTimer? SWIFT代码
【发布时间】:2015-07-29 03:14:03
【问题描述】:

所以我正在创建一个应用程序/游戏,您可以在其中点击与图片相对应的按钮,然后计时器用完并且您输了。您有 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 是什么。

【问题讨论】:

  • 我不知道为什么你的定时器在你失效后会触发,但是你的递归中有一个检查重复项的错误 - 你覆盖 randomInt 以便在递归调用 loadPicture您实际上是在检查此随机数是否与上一个随机数相同,而不是此随机数是否与显示的上一张图片相同
  • 在 loadPicture() 之前 resetTimer() 行写入 timer = nil 。 . .
  • 为了确定,您是在同一个线程中创建计时器吗?其次,您是否尝试将超时时间延长到 5 秒?
  • Paulw11,没有错误。 randomInt 表示图片在数组中的索引。如果int相同,图片也相同。
  • iHart,没用 :(

标签: ios xcode swift nstimer reset


【解决方案1】:

所以我终于想通了……

我必须创建一个单独的函数来通过初始化定时器来启动它。 在 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)
}

【讨论】:

  • NSTimer.scheduledTimerWithTimeInterval 会给我一个新的 NSTimer 实例,对吧?有什么方法可以重置 Timer,比如同一个 Timer 实例?
  • 不,我不这么认为。您可以使其无效,但如果这样做,您将无法再次启动它。 @Que20
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-22
相关资源
最近更新 更多