我尝试运行倒数计时器应用程序。
当我从背景到Forground时,每当我的计时器开始落后1秒时,
我在应用程序在后台和后台运行时获得了系统时间使用此代码获取app forground的时间之间的差异
NSDate *oldDate = [dateFor dateFromString:oldD];
NSLog(@"Old Date in Timer : %@",oldDate);
NSDate *newcurrentdate = [NSDate date];
NSLog(@"NEWCURRENTDATE:%@",newcurrentdate);
NSCalendar *gregorianCalendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSUInteger unitFlags = NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit;
NSDateComponents *componentsss = [gregorianCalendar components:unitFlags
fromDate:oldDate
toDate:newcurrentdate
options:0];
[gregorianCalendar release];
有了这个,我得到了差异。当app从背景到前景时,特别是秒,
并将此秒添加到我的更新计时器的计时器代码
ticks =ticks + 1;
if(ticks > 59)
{
minute = minute + 1;
ticks = 0;
if(minute > 59)
{
hour = hour + 1;
minute = 0;
if(hour > 23)
{
hour = 0;
}
}
}
当时间开始时它第一次运行正常,但是当从背景到地面时,它的计时器每次都会落后一秒钟,
我尝试在代码中添加1秒,但它没有给出特定的计时器值,
我该怎么做?
答案 0 :(得分:0)
不是通过递增变量来计算滴答,而是使用timeIntervalSinceNow或timeIntervalSinceDate更容易获得当前时间和开始日期之间的差异?
要在此时间间隔内获得分钟和小时,您可以执行以下操作:
minute = ((int) (ticks / 60)) % 60;
hour = ((int) (ticks / 3600)) % 24;
这应该提供更准确的时间。