我在互联网上寻找答案,但没有运气。我试过了
- (void)viewDidLoad {
[super viewDidLoad];
twoMinTimer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(timer) userInfo:nil repeats:YES]; }
- (void)timer {
for (int totalSeconds = 120; totalSeconds > 0; totalSeconds--){
timerLabel.text = [self timeFormatted:totalSeconds];
if ( totalSeconds == 0 ) {
[twoMinTimer invalidate];
} } }
但它不起作用,当我去那个视图然后它停止时,标签从2.00变为0.01。
任何建议都将不胜感激 - 菲利普
答案 0 :(得分:7)
你正在使用一次性循环而不是简单地减少总时间。试试这个:
- (void)viewDidLoad {
[super viewDidLoad];
totalSeconds = 120;
twoMinTimer = [NSTimer scheduledTimerWithTimeInterval:1.0
target:self
selector:@selector(timer)
userInfo:nil
repeats:YES];
}
- (void)timer {
totalSeconds--;
timerLabel.text = [self timeFormatted:totalSeconds];
if ( totalSeconds == 0 ) {
[twoMinTimer invalidate];
}
}
将totalSeconds
声明为int。
编辑:我非常感谢@JoshCaswell和@MichaelDorst分别提出的建议和代码格式。 NSTimer绝不是时间的准确表示,对于秒表或计数器来说绝对不够准确。相反,NSDate的+dateSinceNow
将是更准确的替代,甚至逐渐降低的CFAbsoluteTimeGetCurrent()
和mach_absolute_time()
精确到亚毫秒