我发现了很多问题&这里有关于在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;
}
显然,它工作得不好,而且不准确。
有什么建议吗?还是更好的方法?
谢谢:)
答案 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