如何重置 NSTimer? swift 代码
How to reset NSTimer? swift code
所以我正在创建一个 app/game,您可以在计时器用完之前点击与图片对应的按钮,然后您就输了。您有 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)
}
所以我正在创建一个 app/game,您可以在计时器用完之前点击与图片对应的按钮,然后您就输了。您有 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)
}