如何在 X 秒后更改 NSTimer 的 NSTimeInterval?

How to change the NSTimeInterval of an NSTimer after X seconds?

我正在 swift 2 中制作一个应用程序,其中有两个计时器。 10 秒后,我希望另一个计时器走得更快。我试过这样做但是没有用(我正在尝试将 var 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,但它仍然会每两秒重复一次。请帮忙。明确地说,我希望能够在十秒后将 time 更改为 1 而不是 2。我也不想使计时器无效。计时器也在 repeat = true。提前致谢...安东

只设置time = 1不会修改timer.

计时器的timeInterval无法更改。您唯一的选择是创建一个新计时器或以 timeInterval 为 1 启动它,并且每隔 10 秒调用 timer() 时什么也不做。

一些事情。

首先,您无法更改重复的时间间隔 NSTimer - 您需要使第一个计时器无效并为新间隔安排一个新计时器。

第二次对字符串进行 >= 比较对您要实现的目标不起作用。

最后,您陷入了与许多 Swift 程序员相同的坏习惯,并且不必要地初始化了您的计时器变量,但随后又将这些计时器扔掉了。您应该使用可选的或隐式解包的可选

@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)
}