Таймер обратного отсчета между интервалами времени iPhone - PullRequest
0 голосов
/ 24 августа 2011

Мне нужен iPhone, чтобы распознать текущее время (что я могу сделать нормально с NSDate) и перевести его на обратный отсчет до следующего интервала времени, скажем, каждые полчаса на полчаса. Пример: если текущее время 2:12:30 и интервал каждые полчаса, я хочу, чтобы обратный отсчет начался в 17:30 (осталось 17 минут 30 секунд) и перешел на 0.

Код приветствуется, но приветствуются и общие мысли о разработке программы. Вот код, который у меня есть для начала обратного отсчета и получения текущего времени:

-(void)updateCounter:(NSTimer *)theTimer {
        if(secondsLeft > 0 ){
            secondsLeft -- ;
            minutes = (secondsLeft % 3600) / 60;
            seconds = (secondsLeft % 3600) % 60;
            waitingTimeLabel.text = [NSString stringWithFormat:@"%02d:%02d", minutes, seconds];
        }
        else{
            secondsLeft = 10;
        }
    }

    -(void)countdownTimer{
        //secondsLeft = 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];
    }
    -(NSDate *)getCurrentTime
    {
        NSDate *now = [NSDate date];

        NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
        dateFormatter.dateFormat = @"mm:ss";

        [dateFormatter setTimeZone:[NSTimeZone systemTimeZone]];
        NSLog(@"The Current Time is %@",[dateFormatter stringFromDate:now]);
        //[dateFormatter release];
        NSString *currentTime = [NSString stringWithFormat:@"%@",[dateFormatter stringFromDate:now]];
        currentTimeLabel.text = currentTime;
        return now;
    }

1 Ответ

3 голосов
/ 24 августа 2011
NSDate *now = [NSDate date];
int interval = 30*60; // half hour
long int nowSeconds = (long int) [now timeIntervalSince1970];
int secondsLeft = interval - (nowSeconds % interval); 
NSDate *nextIntervalDate =  [NSDate 
    dateWithTimeIntervalSince1970:nowSeconds+secondsLeft];

NSLog(@"Now is %@", now);
NSLog(@"The next interval point in time is %@", nextIntervalDate);
NSLog(@"That's another %d seconds (or %02d:%02d)", 
    secondsLeft, secondsLeft/60, secondsLeft%60);
...