如何在计时器结束时自动延续?

当计时器用完时,我想自动延续。

我在这里有一个计时器:

class Timer{ var timer = NSTimer(); // the callback to be invoked everytime the timer 'ticks' var handler: (Int) -> (); //the total duration in seconds for which the timer should run to be set by the caller let duration: Int; //the amount of time in seconds elapsed so far var elapsedTime: Int = 0; var targetController = WaitingRoomController.self /** :param: an integer duration specifying the total time in seconds for which the timer should run repeatedly :param: handler is reference to a function that takes an Integer argument representing the elapsed time allowing the implementor to process elapsed time and returns void */ init(duration: Int , handler : (Int) -> ()){ self.duration = duration; self.handler = handler; } /** Schedule the Timer to run every 1 second and invoke a callback method specified by 'selector' in repeating mode */ func start(){ self.timer = NSTimer.scheduledTimerWithTimeInterval(1, target: self, selector: "onTick", userInfo: nil, repeats: true); } /** invalidate the timer */ func stop(){ println("timer was invaidated from stop()") timer.invalidate(); } /** Called everytime the timer 'ticks'. Keep track of the total time elapsed and trigger the handler to notify the implementors of the current 'tick'. If the amount of time elapsed is the same as the total duration for the timer was intended to run, stop the timer. */ @objc func onTick() { //println("onTick") //increment the elapsed time by 1 second self.elapsedTime++; //Notify the implementors of the updated value of elapsed time self.handler(elapsedTime); //If the amount of elapsed time in seconds is same as the total time in seconds for which this timer was intended to run, stop the timer if self.elapsedTime == self.duration { self.stop(); } } deinit{ println("timer was invalidated from deinit()") self.timer.invalidate(); } 

}

这是我想执行继续的视图控制器以及定时器如何启动:

 class WaitingRoomController: UIViewController { private func handleSetAction(someTime: String){ countDownLabel.text = setTime; let duration = Utils.getTotalDurationInSeconds(someTime); timer = Timer(duration: duration ){ (elapsedTime: Int) -> () in println("handler called") let difference = duration - elapsedTime; self.countDownLabel.text = Utils.getDurationInMinutesAndSeconds(difference) } timer.start(); } } 

我知道自动延续的代码是:

 func doSegue(){ self.performSegueWithIdentifier("asdf", sender: self) } 

但是我不知道如何将定时器和这个function连接在一起。

你需要使用闭包来实现你想要的,看看我的类Timer

 import UIKit class Timer: NSObject { var counter: Int = 0 var timer: NSTimer! = NSTimer() var timerEndedCallback: (() -> Void)! var timerInProgressCallback: ((elapsedTime: Int) -> Void)! func startTimer(duration: Int, timerEnded: () -> Void, timerInProgress: ((elapsedTime: Int) -> Void)!) { if !(self.timer?.valid != nil) { let aSelector : Selector = "updateTime:" timer = NSTimer.scheduledTimerWithTimeInterval(1, target: self, selector: aSelector, userInfo: duration, repeats: true) timerEndedCallback = timerEnded timerInProgressCallback = timerInProgress counter = 0 } } func updateTime(timer: NSTimer) { ++self.counter let duration = timer.userInfo as! Int if (self.counter != duration) { timerInProgressCallback(elapsedTime: self.counter) } else { timer.invalidate() timerEndedCallback() } } } 

然后你可以通过以下方式调用Timer类:

 var timer = Timer() timer.startTimer(5, timerEnded: { () -> Void in // Here you call anything you want when the timer finish. println("Finished") }, timerInProgress: { (elapsedTime) -> Void in println("\(Int(elapsedTime))") }) 

上面的类也处理定时器的使用,并且注意duration参数使用timer参数中的userInfo传递给updateTime处理函数。

我希望这可以帮助你。

改变'select器:“打勾”select器:@selctor(doSegue)'。 你也可以在这里find更多的信息如何使用NSTimer