Увеличьте timeInterval таймера

Возможный дубликат:
Изменить временной интервал таймер

Итак, у меня есть таймер:

timer=[NSTimer scheduledTimerWithTimeInterval:2 target:self selector:@selector(createNewImage) userInfo:nil repeats:YES];

И я хотел бы, чтобы таймер уменьшался каждые десять секунд, чтобы запланированныйTimerWithTimeInterval переходил к 1,5 через десять секунд, а затем к 1,0 через 10 секунд... Возможно ли это сделать, и если это возможно, как я могу это сделать?


person valentin gougeau    schedule 09.10.2011    source источник


Ответы (3)


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

int iTimerInterval = 2;

-(void) mTimerStart {
    timer = [NSTimer scheduledTimerWithTimeInterval:iTimerInterval target:self selector:@selector(createNewImage) userInfo:nil repeats:YES];
}

-(void) mTimerStop {
    [timer invalidate];

    iTimerInterval = iTimerInterval + 5;

    [self mTimerStart];
}

Это был бы простой способ уменьшить интервал таймера и сохранить его работу, но лично я бы предпочел использовать приведенный ниже, потому что он гарантирует, что таймер запускался только один раз, таким образом, он не будет дублировать экземпляр, заставляя ваш app, чтобы стать глючным, и это также облегчает вам жизнь.

int iTimerInterval = 2;
int iTimerIncrementAmount = 5;
int iTimerCount;
int iTimerChange = 10; //Variable to change the timer after the amount of time
bool bTimerRunning = FALSE;

-(void) mTimerToggle:(BOOL)bTimerShouldRun {
    if (bTimerShouldRun == TRUE) {
        if (bTimerRunning == FALSE) {
            timer = [NSTimer scheduledTimerWithTimeInterval:iTimerInterval target:self selector:@selector(mCreateNewImage) userInfo:nil repeats:YES];
            bTimerRunning = TRUE;
        }
    } else if (bTimerShouldRun == FALSE) {
        if (bTimerRunning == TRUE) {
            [timer invalidate];
            bTimerRunning = FALSE;
        }
    }
}

-(void) mCreateNewImage {
    //Your Code Goes Here

    if (iTimerCount % iTimerChange == 0) { //10 Second Increments
        iTimerInterval = iTimerInterval + iTimerIncrementAmount; //Increments by Variable's amount

        [self mTimerToggle:FALSE]; //Stops Timer
        [self mTimerToggle:TRUE]; //Starts Timer
    }

    iTimerCount ++;
}

-(void) mYourMethodThatStartsTimer {
    [self mTimerToggle:TRUE];
}

Я не закончил весь код, но это большая часть того, что вам понадобится. Просто измените несколько вещей, и все будет хорошо!

person Fernando Cervantes    schedule 10.10.2011

Вы не можете изменить таймер после того, как вы его создали. Чтобы изменить интервал таймера, сделайте старый таймер недействительным и создайте новый с новым интервалом.

person Ole Begemann    schedule 09.10.2011

Вам понадобится набор или последовательность таймеров, по одному для каждого временного интервала. Остановите/отмените один таймер и запустите следующий таймер, когда вы хотите перейти к следующему временному интервалу в вашей временной последовательности.

person hotpaw2    schedule 09.10.2011