开发者

Count Down Timer in iPhone

I have two time.. one fetched directly as string(@"21:00") and other is the current time. I want to display a count down timer showing how much time left from now to reach 21:00.

For eg: the label i use should display "You have 3hrs and 30 minute开发者_开发技巧s left.." if the current time is 17:30. thanks..


OK have completely revised my answer, and have created a complete solution to the problem, with fully tested sample code available on github.

Enjoy :)


Something like this should do it. This will give you the remaining time in seconds. Then you just need to to standard timer stuff as indicated in other answers.

//assumption: targetTime is after now
NSString *targetTime = @"21:00";

//split our time into components
NSArray *timeSplit = [targetTime componentsSeparatedByString:@":"];

NSUInteger hours =  [[timeSplit objectAtIndex:0] intValue];
NSUInteger minutes =  [[timeSplit objectAtIndex:1] intValue];

NSDate *now = [NSDate date];

//split now into year month day components
NSCalendar *currentCalendar = [NSCalendar currentCalendar];
NSDateComponents *dateComponents = [currentCalendar components:NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit fromDate:now];

//set our time components from above
[dateComponents setHour:hours];
[dateComponents setMinute:minutes];

NSDate *targetDate = [currentCalendar dateFromComponents:dateComponents];

//ensure target is after now
if ([targetDate timeIntervalSinceDate:now] < 0)
{
    NSDateComponents *day = [[NSDateComponents alloc] init];
    [day setDay:1];

    targetDate = [currentCalendar dateByAddingComponents:day toDate:targetDate options:0]; 
}

NSTimeInterval timeRemaining = [targetDate timeIntervalSinceDate:now];


You create a NSTimer that fires every second:

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

When it fires, you enter a method:

- (void)tickClock;

in there, you compare the date you have against the current date [NSData currentDate];

Like

NSTimeInterval distanceBetweenDates = [currentDate timeIntervalSinceDate:yourDate];

where distanceBetweenDates is specified in seconds.

To create a date from your string create a NSDate accordingly

NSInteger year = 2011;
NSInteger month = 8;
NSInteger day = 26;
NSInteger hour = 21;
NSInteger minute = 0;
NSInteger second = 0;    


 NSCalendar *calendar = [NSCalendar currentCalendar];
 NSDateComponents *components = [[NSDateComponents alloc] init];
 [components setYear:year];
 [components setMonth:month];
 [components setDay:day];
 [components setHour:hour];
 [components setMinute:minute];
 [components setSecond:second];
  NSDate *date = [calendar dateFromComponents:components];
 [components release];
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜