-1

重複の可能性:
タイマーの時間間隔を変更する

だから私はタイマーを持っています:

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

そして、タイマーが10秒ごとに減少し、そのscheduledTimerWithTimeIntervalが10秒後に1.5になり、10秒後に1.0になることを望みます...これを行うことは可能ですか?可能であれば、どうすればよいですか?

4

3 に答える 3

2

作成後にタイマーを変更することはできません。タイマー間隔を変更するには、古いタイマーを無効にして、新しい間隔で新しいタイマーを作成します。

于 2011-10-09T15:33:10.557 に答える
0

異なる時間間隔ごとに 1 つずつ、タイマーのセットまたはシーケンスが必要になります。1 つのタイマーを停止/無効化し、時系列の次の時間間隔に変更する場合は、次のタイマーを開始します。

于 2011-10-09T17:39:34.053 に答える
0

複数のタイマーを使用する必要はありません。時間間隔に使用する変数を追加し、タイマーを無効にして変数を変更し、タイマーを再度開始するメソッドを作成するだけです。たとえば、タイマーを開始するメソッドを作成できます。

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];
}

これは、タイマー間隔を減らしてタイマーを継続する簡単な方法ですが、個人的には以下の方法を使用することをお勧めします。アプリがグリッチになり、物事が簡単になります。

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];
}

すべてのコーディングを終えたわけではありませんが、必要なものはこれでほとんどです。いくつか変更するだけで、準備万端です!

于 2011-10-10T02:52:32.507 に答える