Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/110.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xcode/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
iOS中的倒计时计时器,根据经过的时间_Ios_Xcode - Fatal编程技术网

iOS中的倒计时计时器,根据经过的时间

iOS中的倒计时计时器,根据经过的时间,ios,xcode,Ios,Xcode,我在这里找到了很多关于在iOS中实现倒计时的问题和答案,但还没有人回答我的问题 我想做的是,当用户按下一个按钮时,它会保存他按下按钮的准确时间,并倒计时6小时。 我让NSTimer触发一个方法,如果计数器达到未来的结束时间,则每1秒计算一次,并相应地在计数器上显示它 到目前为止,我试图做的是保存用户按下按钮的准确时间,同时找出存储在名为futureTime变量中的倒计时结束时间(以毫秒为单位),然后比较两者(startTime和futureTime) 很明显,它工作得不太好,也不准确 有什么建议

我在这里找到了很多关于在iOS中实现倒计时的问题和答案,但还没有人回答我的问题

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

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

很明显,它工作得不太好,也不准确

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


谢谢:)

您只需要一个倒计时计时器,在这种情况下,您可以执行以下操作:

@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

你可能想使用其他东西,因为不能保证你的应用程序在6小时后仍能运行,而且当应用程序在后台时计时器也不会启动。看看本地通知(UILocalNotification)。我会安排一个推送通知,在6小时结束时提醒用户。这是一个简单的方法,但它不会工作,因为当应用程序进入后台时,倒计时会暂停。。。这就是为什么我需要计算时间范围的原因。@Pro5per:哦,如果是这样的话,那么你还需要检查其他情况,比如手机关机。因此,我建议您将时间保存在userdefaults中,并在应用程序启动或激活后继续轮询。没错,但为此,我需要一种方法来计算自存储在NSUserDefaults中的“startTime”以来经过的时间。这就是它变得棘手的地方:(
@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