我在互联网上搜寻答案,但没有运气。我试过了
- (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,然后它停止了。
任何建议将不胜感激
-菲利普
最佳答案
您使用的是单次循环,而不是简单地减少总时间。尝试这个:
- (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()
的精度也可以达到亚毫秒级。关于objective-c - objective-c 如何使计时器从两分钟开始倒数?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11377616/