【问题标题】:Counting down the days - iPhone Count Down Timer倒计时 - iPhone 倒数计时器
【发布时间】:2010-07-05 07:22:54
【问题描述】:

我正在尝试制作一个计数器,显示距离我们出发去欧洲旅行的天数。只有大约 70 天(截至今天),所以我不相信我应该担心天文数字或任何事情,但我真的很难过 - 我附上了一些朋友给我的代码,它没有也不行。当我说我已经尝试了我能想到的所有东西时,请相信我——在任何人咬我的头之前,我已经在这些论坛上看到过,是的,我确实非常广泛地查看了 Apple 文档,但我不是 100%确定从哪里开始 - 我已经尝试过 NSTimer、NSDate 以及它们的所有子类和方法,但没有任何东西可以立即跳出来。

就我认为我实际上应该做的事情而言,我认为我需要以某种方式为今天/现在/当天的“天”分配一个整数值,这将使用[NSDate date] 动态变化,然后我们离开的日期也一样。倒计时只是在再次调用该方法时更新(如果需要,我可以使用 NSTimer 执行此操作),倒计时显示的值是这两个值之间的差异。

我并不特别希望在我们离开之前每秒更新一次闪烁的东西 - 我个人认为这很俗气,但如果有人知道怎么做,我会很感激它以供将来参考。

我还对谷歌进行了广泛的搜索,我可能只是使用了错误的搜索词,但我也找不到任何东西。

非常感谢任何帮助。

非常感谢。

Michaeljvdw

- (void)countDownMethod {
NSDateComponents *comps = [[NSDateComponents alloc] init];
[comps setDay:startDay];
[comps setMonth:startMonth];
[comps setYear:startYear];
[comps setHour:startHour];

NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSDate *date = [gregorian dateFromComponents:comps];
NSLog(@"%@",date);
[gregorian release];
[comps release];
NSTimeInterval diff = [date timeIntervalSinceNow];

int diffInt = diff;

NSString *days = [NSString stringWithFormat:@"%d",diffInt/86400];
day0.text = @"0";   
day1.text = @"0";
day2.text = @"0";
NSLog(@"Days Length: %d",days.length);

if(days.length >= 1){
    day2.text = [days substringFromIndex:days.length - 1];

    if(days.length >= 2){
        day1.text = [days substringWithRange:NSMakeRange(days.length - 2, 1)];

        if(days.length >= 3){
            day0.text = [days substringWithRange:NSMakeRange(days.length - 3, 1)];
        }
    }
}

NSString *hours = [NSString stringWithFormat:@"%d",(diffInt%86400)/3600];
hour0.text = @"0";
hour1.text = @"0";
NSLog(@"Hours Length: %d",hours.length);

if(hours.length >= 1){
    hour1.text = [hours substringFromIndex:hours.length - 1];

    if(hours.length >= 2){
        hour0.text = [hours substringWithRange:NSMakeRange(hours.length - 2, 1)];
    }
}
NSString *minutes = [NSString stringWithFormat:@"%d",((diffInt%86400)%3600)/60];
minute0.text = @"0";
minute1.text = @"0";
NSLog(@"Minutes Length: %d",minutes.length);

if(minutes.length >= 1){
    minute1.text = [minutes substringFromIndex:minutes.length - 1];

    if(minutes.length >= 2){
        minute0.text = [minutes substringWithRange:NSMakeRange(minutes.length - 2, 1)];
    }
}

}

【问题讨论】:

    标签: objective-c iphone timer countdown


    【解决方案1】:

    如果您知道两个日期之间的时间(以秒为单位)(您的 NSTimeInterval),那么您可以轻松地将其转换为格式为 days:hours:mins:secs 的字符串,如下所示。

    - (NSString*)secsToDaysHoursMinutesSecondsString:(NSTimeInterval)theSeconds {
    div_t r1 = div(theSeconds, 60*60*24);
    NSInteger theDays = r1.quot;
    NSInteger secsLeftFromDays = r1.rem;
    
    div_t r2 = div(secsLeftFromDays, 60*60);
    NSInteger theHours = r2.quot;
    NSInteger secsLeftFromHours = r2.rem;
    
    div_t r3 = div(secsLeftFromHours, 60);
    NSInteger theMins = r3.quot;
    NSInteger theSecs = r3.rem;
    
    NSString* days;
    if (theDays < 10) { // make it 2 digits
        days = [NSString stringWithFormat:@"0%i", theDays];
    } else {
        days = [NSString stringWithFormat:@"%i", theDays];
    }
    
    NSString* hours;
    if (theHours < 10) { // make it 2 digits
        hours = [NSString stringWithFormat:@"0%i", theHours];
    } else {
        hours = [NSString stringWithFormat:@"%i", theHours];
    }
    
    NSString* mins;
    if (theMins < 10) { // make it 2 digits
        mins = [NSString stringWithFormat:@"0%i", theMins];
    } else {
        mins = [NSString stringWithFormat:@"%i", theMins];
    }
    
    NSString* secs;
    if (theSecs < 10) { // make it 2 digits
        secs = [NSString stringWithFormat:@"0%i", theSecs];
    } else {
        secs = [NSString stringWithFormat:@"%i", theSecs];
    }
    
    return [NSString stringWithFormat:@"%@:%@:%@:%@", days, hours, mins,secs];
    }
    

    【讨论】:

      【解决方案2】:
          //Another simple way  to get the numbers of days difference to a future day from today.
      
      NSTimeInterval todaysDiff = [todayDate timeIntervalSinceNow];
      NSTimeInterval futureDiff = [futureDate timeIntervalSinceNow];
      NSTimeInterval dateDiff = futureDiff - todaysDiff;
      
      div_t r1 = div(dateDiff, 60*60*24);
      NSInteger theDays = r1.quot;
      
      label.text = [NSString stringWithFormat:@"%i", theDays];
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-02-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多