2011-09-20 74 views
-1

一旦IBAction被按下,我想要一个计数器。计数但00:00:00格式

但以这种形式

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

这是迄今为止代码:

-(void)countUp { 

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

} 

这仅在00格式计数

感谢您的帮助!

回答

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; 
相关问题