Swift NSTimer动态更改时间间隔
问题描述:
如何更改NSTimer的时间间隔?Swift NSTimer动态更改时间间隔
var difficulty: Double = 1.0
override func viewDidLoad() {
super.viewDidLoad()
_ = NSTimer.scheduledTimerWithTimeInterval(difficulty, target: self, selector: #selector(hideAllBtns), userInfo: nil, repeats: true)
}
我运行一个switch语句,每次从hideallbuttons被调用,然后更新难度。
func getDifficulty (score : Double) -> Double {
switch score {
case 0...100: return(1.0)
case 100...200: return (0.8)
case 200...300: return (0.5)
case 300...400: return (0.2)
default: return (1.0)
}
}
不过的NSTimer继续开火1.0S我相信它会创建在第一次运行,坚持该值的副本,我试图创建的计时器调用一个变量,但不起作用。
是否有一种简单的方法来动态调整定时器触发的速率?
这只是一个实践项目,因为我仍在学习,所以我明白可能有更好的方法来构建我正在尝试做的事情。我认为动态调整计时器对未来的使用会很有用。
答
一旦你启动计时器,它就不能运行。
我不知道正是你需要的,但你有两种选择:
无效定时器,并触发一个新的一个新的时间间隔,你甚至可以声明在类的定时器,只需重写该值(无效后)。
将重复值设置为false并每次启动新计时器。
这个例子看看:
class ViewController: UIViewController {
var difficulty: Double = 1.0
var timer = NSTimer()
override func viewDidLoad() {
activateTimer()
}
func activateTimer(){
NSTimer.scheduledTimerWithTimeInterval(difficulty, target: self, selector: Selector(self.timerMethod()), userInfo: nil, repeats: true)
}
func timerMethod() {
print("Timer method called")
}
func endTimer() {
timer.invalidate()
}
func increaseDifficulty() {
difficulty = 2.0
endTimer()
activateTimer()
}
}
答
一旦创建它不能更改一个NSTimer对象的区间。
要解决这个问题,您可以提高定时器触发的速率,并手动检查是否已经过了所需的时间量。这允许你定义一个动态更新的时间量 - 模仿一个动态的定时器:
var lastTriggered: NSDate!
var dynamicInterval = 1.0
var timerInterval = 0.1
override func viewDidLoad() {
super.viewDidLoad()
lastTriggered = NSDate()
_ = NSTimer.scheduledTimerWithTimeInterval(timerInterval, target: self, selector: #selector(hideAllBtns), userInfo: nil, repeats: true)
}
func hideAllBtns() {
let currentDate = NSDate()
if(currentDate.timeIntervalSinceDate(lastTriggered) >= dynamicInterval) {
// This will only be called every dynamicInterval seconds
// Now call getDifficulty and/or update your dynamicInterval
lastTriggered = currentDate
}
}
你的'NSTimer'被设置为repeat:true。所以它会重复1秒。您需要根据难度设置持续时间,然后重复:false。你应该调用一个方法来启动定时器,并在'hideAllBtns'中根据难度重新启动定时器。另请参阅如何在swift中创建getter和setter。https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Properties.html#//apple_ref/doc/uid/TP40014097-CH14-ID259 – Asdrubal
“这只是一个练习项目”在询问之前练习搜索的好机会。 – matt