Запустите NSTimer определенное количество раз - PullRequest
2 голосов
/ 14 ноября 2011

Можно ли запустить NSTimer так:

NSTimer *f = [[NSTimer alloc] initWithFireDate:[NSDate date]
                                      interval:.05
                                        target:self
                                      selector:@selector(checkForCollisions)
                                      userInfo:nil repeats:YES];

NSRunLoop *runner = [NSRunLoop currentRunLoop];
[runner addTimer:f forMode: NSDefaultRunLoopMode];
[f release];

но укажите, сколько раз я хочу, чтобы он запускался? Итак, если бы я хотел, чтобы он работал всего 2 секунды (при условии, что интервал 0,05), я мог бы указать, что он будет запускаться 40 раз? Возможно ли это?

Ответы [ 3 ]

3 голосов
/ 14 ноября 2011

YourViewController.h

NSTimer *f;
NSInteger counter;

YourViewController.m

- (void)setup {
    // initialization code
    counter = 0;
    f = [[NSTimer alloc] initWithFireDate:[NSDate date]
                                 interval:.05
                                   target:self
                                 selector:@selector(checkForCollisions)
                                 userInfo:nil repeats:YES];

    NSRunLoop *runner = [NSRunLoop currentRunLoop];
    [runner addTimer:f forMode: NSDefaultRunLoopMode];
}

- (void)checkForCollisions {
    // handle check

    counter++;
    if (counter >= 40) {
        [f invalidate];
        [f release];
    }
} 
0 голосов
/ 14 ноября 2011

Просто уменьшите счетчик в методе checkForCollisions.

0 голосов
/ 14 ноября 2011
static int numberOfTimes = 0;
static int inAndOut = 0;
...

int interval = 0.5;
int 2seconds = 120;
numberOfTimes = 2seconds/interval;

- (void) checkForCollisions {
    if (numberOfTimes <= inAndOut) {
        //check collisions
    }
}
...