按下IBAction后,我想要一个计数器。
但是以这种形式
00:00:00 小时:分钟:秒
这是到目前为止的代码:
-(void)countUp {
mainInt += 1;
seconds.text = [NSString stringWithFormat:@"%02d", mainInt];
}
这仅以00格式计算
感谢您的帮助!
答案 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;