0

我在互联网上搜索了答案,但没有运气。我试过

- (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,然后它就停止了。

任何建议将不胜感激 - 菲利普

4

1 回答 1

7

您正在使用一次性 for 循环,而不是简单地减少总时间。试试这个:

- (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()并且精确到亚毫秒

于 2012-07-07T18:37:27.153 回答