Objective c 如何使用NSDate运行倒计时?
我已经开发了一个应用程序,其中我正在运行一个倒计时计时器。计时器每秒触发一个方法。但是,当手机处于睡眠模式时,计时器会变慢甚至关闭 我想我需要通过使用NSDate计算时间间隔来更新变量。有人知道怎么做吗 顺便说一句,我们的客户发送了以下反馈: 计时器问题似乎是由以下原因引起的 代码假设 计时器通知消息如下所示: 正好在一秒钟内送达,但是 不是。当应用程序正在运行但 手机处于待机状态,使用 定时器更新倒计时定时器。 但计时器的速度要慢得多 超过一秒,所以倒计时 定时器关了。应用程序应该是 修改以始终更新 基于当前值的倒计时计时器 时间,而不是根据时间倒数 计时器消息本身。(其他 文字,当一秒钟的信息 进来时,总是假设 额外的时间已经过去了 按以下公式计算剩余时间: 从目标时间中减去。这个 是指当您重新启动 应用程序——它计算出目标时间 当前时间减去一 从另一个,并更新 屏幕计时器。好吧,就是这样 我们应该一直这样做。)Objective c 如何使用NSDate运行倒计时?,objective-c,iphone-sdk-3.0,nstimer,Objective C,Iphone Sdk 3.0,Nstimer,我已经开发了一个应用程序,其中我正在运行一个倒计时计时器。计时器每秒触发一个方法。但是,当手机处于睡眠模式时,计时器会变慢甚至关闭 我想我需要通过使用NSDate计算时间间隔来更新变量。有人知道怎么做吗 顺便说一句,我们的客户发送了以下反馈: 计时器问题似乎是由以下原因引起的 代码假设 计时器通知消息如下所示: 正好在一秒钟内送达,但是 不是。当应用程序正在运行但 手机处于待机状态,使用 定时器更新倒计时定时器。 但计时器的速度要慢得多 超过一秒,所以倒计时 定时器关了。应用程序应该是 修改以始
如果有人知道我们到底需要什么,请告诉我 使用纪元时间。纪元时间是自1970年1月1日以来的秒数 程序启动时,保存当前历元时间
double start = [[NSDate date] timeIntervalSince1970];
然后当你更新计时器时
double running = [[NSDate date] timeIntervalSince1970] - start;
将告诉您自
启动以来经过了多少秒
使用纪元时间。纪元时间是自1970年1月1日以来的秒数
程序启动时,保存当前历元时间
double start = [[NSDate date] timeIntervalSince1970];
然后当你更新计时器时
double running = [[NSDate date] timeIntervalSince1970] - start;
将告诉您自
开始以来已过了多少秒
时间不应用于实际计时。它们依赖于运行循环,因此可能会受到运行时间较长的代码的干扰
您应该在applicationWillResignActive:
中停止计时器,并在applicationdidebomeactive:
中继续(实际上,创建另一个计时器)
要计算日期,您需要以下内容:
NSDate *startDate=[NSDate date];
NSDate *endDate=[startDate addTimeInterval:someSeconds];
NSTimeInterval secsElapsed;
...
-(void) timerDidFire:(NSTimer *) aTimer{
NSDate *dateNow=[NSDate date];
if ([[dateNow laterDate:endDate] isEqual:endDate]) {
[aTimer invalidate];
// end countdown
}else {
secsElapsed=[dateNow timeIntervalSinceDate:startDate];
}
}
NSTimer永远不应该用于实际计时。它们依赖于运行循环,因此可能会受到运行时间较长的代码的干扰 您应该在
applicationWillResignActive:
中停止计时器,并在applicationdidebomeactive:
中继续(实际上,创建另一个计时器)
要计算日期,您需要以下内容:
NSDate *startDate=[NSDate date];
NSDate *endDate=[startDate addTimeInterval:someSeconds];
NSTimeInterval secsElapsed;
...
-(void) timerDidFire:(NSTimer *) aTimer{
NSDate *dateNow=[NSDate date];
if ([[dateNow laterDate:endDate] isEqual:endDate]) {
[aTimer invalidate];
// end countdown
}else {
secsElapsed=[dateNow timeIntervalSinceDate:startDate];
}
}
[NSDate date]是当前时间。[NSDate date]是当前时间。