2016-01-03 44 views
0

我正在swift 2中製作一個應用程序,其中有兩個計時器。 10秒後,我想要另一個計時器加快速度。我試圖做這樣的,但它沒有工作(我試圖改變VAR time 1):如何在X秒後更改NSTimer的NSTimeInterval?

@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打印(時間),在十秒鐘後它會打印1而不是2,但它仍然每兩秒重複一次。請幫忙。要清楚,我希望能夠在10秒後將time更改爲1而不是2。我也不想讓計時器失效。定時器也在repeat = true。在此先感謝...安東

+0

您如何知道'time = 1'不工作?應該發生什麼不是? –

+0

@聰明錯誤func計時器中的代碼不是每1秒重複一次,而是每兩秒鐘重複一次。 –

+0

@聰明錯誤如果我在函數計時器中寫入print(time),十秒後它將打印1而不是2,但它仍然每兩秒重複一次。 –

回答

3

一些事情。

首先,您不能更改重複的時間間隔NSTimer - 您需要使第一個計時器無效併爲新的時間間隔安排一個新計時器。

第二個a> =字符串比較不會對你想要達到的效果有效。

最後,你已經陷入了和許多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) 
} 
+0

什麼是我現在有關變量和你的代碼(使變量可選)之間的區別?它會改變應用程序的性能嗎? –

+0

可能會有性能改進,但它更像是一種風格問題 - 您正在創建一個NSTimer(未計劃或設置),以滿足Swift的要求,即非可選變量已初始化,但您只是要拋出這個計時器稍後離開。如果一個變量直到以後才真正被初始化,那麼最好使用一個可選項來確保你的代碼正確地處理這個變量。 Swift中的Optionals允許您避免使用初始化變量時遇到的一類錯誤;初始化他們的方式是你顛覆了這整個好處 – Paulw11

2

只是設置time = 1將不會修改timer

定時器的timeInterval不能更改。你唯一的選擇是創建一個新的定時器,或者以1的timeInterval開始,並且在其他時間不做任何事情timer()直到10秒過去。