iOS中的倒计时计时器根据已用时间

时间:2014-05-07 12:10:15

标签: ios xcode

我发现了很多问题&这里有关于在iOS中实现倒数计时器的答案,但没有人回答我的问题。

我想要做的是当用户按下按钮时,它会保存按下按钮的准确时间并倒数6小时。 我让NSTimer启动一个方法,如果计数器到达未来结束时间,则每1秒计算一次,并在计数器上相应地显示它。

到目前为止我尝试做的是保存用户按下按钮的确切时间,同时找出它应该结束存储在名为futureTime的变量中的倒计时(以毫秒为单位)的时间,并比较两者(startTime和futureTime) )。

- (void)viewDidLoad
{
    [super viewDidLoad];

    sixHours = 21600000;
}


- (IBAction)startTimer:(id)sender {
    [self setStartTime];
    [timer invalidate];
    secondsLeft = sixHours;
    futureTime = self.startTime + sixHours;
    timer = [NSTimer scheduledTimerWithTimeInterval:1.0f target:self selector:@selector(updateCounter:) userInfo:nil repeats:YES];
}

- (void)updateCounter:(NSTimer *)theTimer {
    NSTimeInterval currentTimeInMilliseconds = [[NSDate date] timeIntervalSince1970];
    if (currentTimeInMilliseconds == futureTime) {
        [timer invalidate];
        self.counterLabel.text = @"Done!";
    } else {
        secondsLeft -= 1000;
        self.counterLabel.text = [self formatTimeStamp:secondsLeft];
    }
}

- (void)setStartTime {
    NSTimeInterval currentTimeInMilliseconds = [[NSDate date] timeIntervalSince1970];
    self.startTime = currentTimeInMilliseconds;
}

显然,它工作得不好,而且不准确。

有什么建议吗?还是更好的方法?

谢谢:)

1 个答案:

答案 0 :(得分:0)

你只想要一个倒数计时器,在这种情况下你可以这样做:

@implementation AppDelegate{
    NSTimer *timer;
    NSInteger totalSeconds;
}


-(void)showTime{
    NSLog(@"%ld",totalSeconds--);
    if (totalSeconds==0){
        NSLog(@"6 hours!!! Time over.");
        [timer invalidate];
    }
}


- (IBAction)countDown:(id)sender {
    totalSeconds = 6*60*60; //6 hours * 60 minutes * 60 seconds
    timer = [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(showTime) userInfo:nil repeats:YES];
}

@end