以00:00:00格式计数

时间:2011-09-20 20:10:59

标签: objective-c cocoa-touch

按下IBAction后,我想要一个计数器。

但是以这种形式

00:00:00 小时:分钟:秒

这是到目前为止的代码:

-(void)countUp {

    mainInt += 1;
    seconds.text = [NSString stringWithFormat:@"%02d", mainInt];

}

这仅以00格式计算

感谢您的帮助!

1 个答案:

答案 0 :(得分:2)

只需进行适当的数学运算,将计数分解为其组成部分:

NSString *timeString = [NSString stringWithFormat:@"%02d:%02d:%02d",
                                                  totalSeconds/3600,        // hours
                                                  (totalSeconds/60)%60,     // minutes
                                                  totalSeconds%3600]        // seconds

为了便于阅读,用宏或函数替换内联数学会很好,例如:

#define secondsPerMinute 60
#define minutesPerHour 60

int hours(int secs) {
    return secs/(minutesPerHour * secondsPerMinute);
}

int minutes(int secs) {
    return (secs/secondsPerMinute) % minutesPerHour;
}

int seconds(int secs) {
    return secs % (minutesPerHour * secondsPerMinute);
}

// ...
NSString *timeString = [NSString stringWithFormat:@"%02d:%02d:%02d",
                                                  hours(totalSeconds),
                                                  minutes(totalSeconds),
                                                  seconds(totalSeconds)];

通常在实现此类显示时,您不希望冒号在经过的时间发生变化时跳转。许多字体都有固定宽度的数字,所以它并不总是一个问题,但你可能想要在小时,分钟和秒之间使用三个单独的标签,其中冒号之间有不变的标签。

上面数学的另一种方法是将秒,分和小时存储在三个变量而不是一个变量中,只需要小心增加分钟数并在秒数达到60时重置秒数,依此类推。为了使这更容易使用,请将其封装在类中,例如:

@interface Time : NSObject {
    int seconds;
    int minutes;
    int hours;
}
- (void)countUp;
- (NSString*)timeString;
@end;