我正在尝试将倒计时器定时到特定日期。我用:
-(void) viewWillAppear:(BOOL)animated {
NSString *str =@"12/27/2013";
NSDateFormatter *formatter = [[NSDateFormatter alloc]init];
[formatter setDateFormat:@"MM/dd/yyyy"];
NSDate *date = [formatter dateFromString:str];
NSTimeInterval numberOfSecondsUntilSelectedDate = [date timeIntervalSinceNow];
NSInteger numberOfDays = numberOfSecondsUntilSelectedDate / 86400;
startTime = [[NSDate date] retain];
secondsLeft = numberOfDays;
NSLog(@"number%f", numberOfSecondsUntilSelectedDate);
[self countdownTimer];
}
- (void)updateCounter:(NSTimer *)theTimer {
if(secondsLeft > 0 ){
secondsLeft -- ;
days = secondsLeft / 86400;
NSLog(@"%d", days);
hours = secondsLeft / 3600;
minutes = (secondsLeft % 3600) / 60;
seconds = (secondsLeft %3600) % 60;
myCounterLabel.text = [NSString stringWithFormat:@"%02d Days %02d Hours %02d Minutes %02d Seconds", days, hours, minutes, seconds];
}
else{
secondsLeft = 16925;
}
}
-(void)countdownTimer{
secondsLeft = hours = minutes = seconds = 0;
if([timer isValid])
{
[timer release];
}
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
timer = [NSTimer scheduledTimerWithTimeInterval:1.0f target:self selector:@selector(updateCounter:) userInfo:nil repeats:YES];
[pool release];
}
然而,这一天不断出现为0.我做错了什么?
答案 0 :(得分:8)
计算到特定日期的方法是启动一个计时器,并在每次触发时询问该日期是否已经过去。第二个问题是如何计算UI之前的小时分钟秒。答案有NSDateFormatter - 绝对不是* 60或* 24数学。
@property (strong, nonatomic) NSDate *targetDate;
// compute targetDate as you have it
// ...
self.targetDate = [formatter dateFromString:str]
// start a timer
[NSTimer scheduledTimerWithTimeInterval:0.5 target:self selector:@selector(updateCounter:) userInfo:nil repeats:YES];
- (void)updateCounter:(NSTimer *)theTimer {
NSDate *now = [NSDate date];
// has the target time passed?
if ([self.targetDate earlierDate:now] == self.targetDate) {
[theTimer invalidate];
} else {
NSUInteger flags = NSCalendarUnitHour | NSCalendarUnitMinute | NSCalendarUnitSecond;
NSDateComponents *components = [[NSCalendar currentCalendar] components:flags fromDate:now toDate:self.targetDate options:0];
NSLog(@"there are %ld hours, %ld minutes and %ld seconds remaining", (long)[components hour], (long)[components minute], (long)[components second]);
}
}
答案 1 :(得分:0)
逻辑错误....
-(void) viewWillAppear:(BOOL)animated {
NSString *str =@"12/27/2013";
NSDateFormatter *formatter = [[NSDateFormatter alloc]init];
[formatter setDateFormat:@"MM/dd/yyyy"];
NSDate *date = [formatter dateFromString:str];
NSTimeInterval numberOfSecondsUntilSelectedDate = [date timeIntervalSinceNow];
NSInteger numberOfDays = numberOfSecondsUntilSelectedDate / 86400;
startTime = [[NSDate date] retain];
secondsLeft = numberOfSecondsUntilSelectedDate;
NSLog(@"number%f", numberOfSecondsUntilSelectedDate);
[self countdownTimer];
}