如何在X秒后更改NSTimer的NSTimeInterval?
我正在快速制作一个有两个定时器的应用程序。 10秒后,我想另一个计时器去更快。 我试过这样做,但它没有工作(我试图改变无功time
为1):
@IBOutlet var displayTimeLabel: UILabel! var startTimer = NSTimeInterval() var timer = NSTimer() var timer2:NSTimer = NSTimer() var time = 2.0 @IBAction func Start(sender: UIButton) { if !timer2.valid { timer2 = NSTimer.scheduledTimerWithTimeInterval(0.01, target: self, selector: "updateTime", userInfo: nil, repeats: true) startTimer = NSDate.timeIntervalSinceReferenceDate() } timer = NSTimer.scheduledTimerWithTimeInterval(time, target: self, selector: "timer:", userInfo: nil, repeats: true) } func timer(timer: NSTimer){ //code } func updateTime() { if displayTimeLabel.text >= "00:10.00"{ print("00:10.00") //works time = 1 // trying to execute code after 10 seconds(doesn't work) } let currentTime = NSDate.timeIntervalSinceReferenceDate() var elapsedTime: NSTimeInterval = currentTime - startTimer let minutes = UInt8(elapsedTime / 60.0) elapsedTime -= (NSTimeInterval(minutes) * 60) let seconds = UInt8(elapsedTime) elapsedTime -= NSTimeInterval(seconds) let fraction = UInt8(elapsedTime * 100) let strMinutes = String(format: "%02d", minutes) let strSeconds = String(format: "%02d", seconds) let strFraction = String(format: "%02d", fraction) displayTimeLabel.text = "\(strMinutes):\(strSeconds).\(strFraction)" }
如果我在func timer
写入print(time),十秒钟后它将打印1而不是2,但是它仍然每两秒重复一次。 请帮忙。 要清楚,我希望能够在10秒后将time
更改为1而不是2。 我也不想使计时器失效。 定时器也在repeat = true
。 在此先感谢…安东
一些事情。
首先,您不能更改重复的NSTimer
的时间间隔 – 您需要使第一个计时器无效并为新的时间间隔安排一个新的计时器。
第二个a> =比较string不会为你想要达到的效果。
最后,你已经陷入了和许多Swift程序员一样的坏习惯,并且不必要地初始化你的计时器variables,只是随后丢掉那些计时器。 您应该使用可选或隐式解包的可选项
@IBOutlet var displayTimeLabel: UILabel! var startTime:NSDate? var timer : NSTimer? var timer2: NSTimer? var time = 2.0 @IBAction func Start(sender: UIButton) { if (self.timer2 == nil) { self.time=2.0 self.timer2 = NSTimer.scheduledTimerWithTimeInterval(0.01, target: self, selector: "updateTime", userInfo: nil, repeats: true) self.startTime = NSDate() self.timer = NSTimer.scheduledTimerWithTimeInterval(time, target: self, selector: "timer:", userInfo: nil, repeats: true) } } func timer(timer: NSTimer){ //code } func updateTime() { let currentTime = NSDate.timeIntervalSinceNow() var elapsedTime = -self.startTime!.timeIntervalSinceNow() if (elapsedTime >10.0 && self.time==2.0) { timer.invalidate() self.time=1.0 self.timer = NSTimer.scheduledTimerWithTimeInterval(time, target: self, selector: "timer:", userInfo: nil, repeats: true) } let minutes = UInt8(elapsedTime / 60.0) elapsedTime -= (NSTimeInterval(minutes) * 60) let seconds = UInt8(elapsedTime) elapsedTime -= NSTimeInterval(seconds) let fraction = UInt8(elapsedTime * 100) displayTimeLabel.text = String(format: "%02d:%02d.%02d", minutes,seconds,fraction) }
只是设置time = 1
将不会修改timer
。
定时器的timeInterval
不能被改变。 你唯一的select是创build一个新的定时器,或者以timeInterval
为1来启动它,并且每隔一段时间timer()
被调用,直到10秒过去。