Ios N定时到4位标签更新

Ios N定时到4位标签更新,ios,swift,stopwatch,Ios,Swift,Stopwatch,我刚刚制作了一个带有教程的秒表,但我想做的是将我的00:00标签更新为1秒递增,例如00:01、00:02:00:03,并在几分钟内更新。这样做有什么好处吗?提前谢谢 这是Objective-C,但你会想到: -(void) updateTotalTime { int forHours = timeInSeconds / 3600, remainder = timeInSeconds % 3600, forMinutes = remainder / 60, forSeconds = rem

我刚刚制作了一个带有教程的秒表,但我想做的是将我的00:00标签更新为1秒递增,例如00:01、00:02:00:03,并在几分钟内更新。这样做有什么好处吗?提前谢谢

这是Objective-C,但你会想到:

-(void) updateTotalTime
{
int forHours = timeInSeconds / 3600, 
remainder = timeInSeconds % 3600, 
forMinutes = remainder / 60, 
forSeconds = remainder % 60;

[elapsedTime setString:[NSString stringWithFormat:NSLocalizedString(@"elapsedTime", nil)
                        ,forHours
                        ,forMinutes
                        ,forSeconds]];

}
在我的Localizable.strings中:

"elapsedTime" = "Time: %02d:%02d:%02d";

然后,您必须获取开始计数的日期,从该日期开始计数是特定事件发生时的当前日期,假设我们将在视图出现时启动计时器,因此实现视图将如下所示:

var currentDate = NSDate()

override func viewWillAppear(animated: Bool) {

    currentDate = NSDate()

    var timer: NSTimer = NSTimer.scheduledTimerWithTimeInterval(1, target: self, selector: "updateLabel", userInfo: nil, repeats: true)

    timer.fire()

}
并实现updateLabel函数:

func updateLabel() {

    dispatch_async(dispatch_get_main_queue(), { () -> Void in

        var elapsedSeconds: NSTimeInterval = -self.currentDate.timeIntervalSinceNow

        let minutes: Int = Int(elapsedSeconds)/60
        let seconds: Int = Int(elapsedSeconds) - (minutes*60)

        self.timeLabel.text = String(format: "%02d:%02d", minutes, seconds)

    })

}

格式化时间过后,
nsdatecomponentsformter
是另一个选项:

var start: CFAbsoluteTime!

override func viewDidLoad() {
    super.viewDidLoad()

    start = CFAbsoluteTimeGetCurrent()
    NSTimer.scheduledTimerWithTimeInterval(0.1, target: self, selector: "handleTimer:", userInfo: nil, repeats: true)
}

lazy var formatter: NSDateComponentsFormatter = {
    let _formatter = NSDateComponentsFormatter()
    _formatter.allowedUnits = .CalendarUnitMinute | .CalendarUnitSecond
    _formatter.zeroFormattingBehavior = .Pad
    return _formatter
}()

func handleTimer(timer: NSTimer) {
    let elapsed = CFAbsoluteTimeGetCurrent() - start
    label.text = formatter.stringFromTimeInterval(elapsed)
}

诚然,这会给你以
0:00
格式的时间,而不是
00:00
格式的时间。

有没有这样做的方法?对提供您尝试过的代码以及它不起作用的原因,编写代码是开发人员的工作。这是关于帮助编写代码,而不是提供代码。-1用于ObjC,-1用于NSLocalizedString,没有要求,-100用于在OP没有显示代码或工作时仅提供代码。OP可能使用计时器。请参阅上面的更新注释,说明两个日期之间的差异。对于一个简单的问题,要想得太多。这是一样的,毕竟你会把这个时间间隔转换成秒。考虑一个变量在每个定时器回调上被更新,从来没有一个日期。@ ZAPH:是的,我试过了,它是完美的,请尝试一下,告诉我应该修改什么?我没有仔细阅读引用的代码,它确实有效。