-2

我希望在我的应用程序中创建一个倒数计时器,以便我可以给出一定的持续时间(如 15 分钟或 15:00),并且它从一个动作开始。

我还需要该倒计时计时器从外部 Web 服务获取经过的持续时间和总持续时间信息,并开始倒计时剩余时间。

这实际上是针对一个测验应用程序,其中将向用户展示一系列问题,并且计时器将放置在问题屏幕上(针对整个测验,而不仅仅是一个问题)。用户可以设置测验的持续时间,倒计时将在用户开始参加测验后立即开始。还有一个暂停功能,用户可以暂停测试,经过的时间和总持续时间的信息将在网络服务中注册。用户可以随时恢复测验,倒计时计时器从暂停时间开始(即从 Web 服务获取此信息)。

提前致谢。

PS:老实说,我不知道该怎么做。关于将时间存储在 Web 服务中的格式以及许多其他内容(例如在 NSTimer 循环运行后程序是否会继续执行等),存在太多的混淆。所以你知道我的意思。是的,NSTimer 确实解决了 Alex 所说的问题,并提供了示例代码。

4

2 回答 2

3

查看NSTimer的文档。

通常,您会创建一个每秒调用一个方法的 NSTimer,如下所示:

NSTimer *theTimer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(tick) userInfo:nil repeats:YES];

然后在滴答声中,您将减少一个保存剩余时间的变量,并更新显示屏上的标签。

此外,如果您想要一些工作示例代码,请查看我在 GitHub 上的小倒计时应用程序。

于 2012-07-10T18:34:52.997 回答
0

试试这些代码,我已经在我的应用程序中实现了它。最适合重新发送 OTP 类型的功能。

int secondsLeft;
int hours, minutes, seconds;

secondsLeft = 60;
[self countdownTimer];

-(void)countdownTimer {
//    secondsLeft = hours = minutes = seconds = 0;
timer = [NSTimer scheduledTimerWithTimeInterval:1.0f target:self selector:@selector(updateCounter:) userInfo:nil repeats:YES];

}

- (void)updateCounter:(NSTimer *)theTimer {
if(secondsLeft > 0 ) {
    secondsLeft -- ;
    hours = secondsLeft / 3600;
    minutes = (secondsLeft % 3600) / 60;
    seconds = (secondsLeft %3600) % 60;
    labelSeconds.text = [NSString stringWithFormat:@"%02d seconds left.",seconds];
} else {

    [timer invalidate];
    return;
}

}

于 2016-10-06T07:21:38.553 回答