複数のインスタンスを作成せずに、シーケンス内の異なる間隔で特定のメソッドまたは複数のメソッドを起動NSTimer
するにはどうすればよいでしょうか。NSTimer
たとえば、method1(0.3秒)、method2(0.5)、method3(0.7)などです。
誰かがサンプルコードを共有していただければ幸いです。
複数のインスタンスを作成せずに、シーケンス内の異なる間隔で特定のメソッドまたは複数のメソッドを起動NSTimer
するにはどうすればよいでしょうか。NSTimer
たとえば、method1(0.3秒)、method2(0.5)、method3(0.7)などです。
誰かがサンプルコードを共有していただければ幸いです。
これであなたの最終的な目標が何であるかはわかりませんが、あなたの質問を読んだ後、私は次の方法を試すことをお勧めします、多分これはあなたが探しているものです。
このコードは、通常は同じクラスを異なる間隔で開始したい場所に配置する必要がありますNSTimer
(残念ながら不可能です)。
{
// ...
[self performSelector:@selector(method1) withObject:nil afterDelay:0.3f];
[self performSelector:@selector(method2) withObject:nil afterDelay:0.5f];
[self performSelector:@selector(method3) withObject:nil afterDelay:0.7f];
// ...
}
キューに入れられたすべてのセレクターのスケジュールを解除する必要がある場合は、このコードを使用してください。
[NSObject cancelPreviousPerformRequestsWithTarget:self];
NSTimer
それ自体はその機能を提供せず、一定の間隔で1回または繰り返し起動します。NSTimer
この効果を達成するには、複数のタイマーが必要になるか、完全に離れる必要があります。
現在の時間間隔を起動されたセレクターに渡し、そこでさらに処理する必要があると思います。時間間隔が0.3の場合、method1、0.5-method2を呼び出すと、これを実装する他の方法はほとんどありません。
NSTimer
次のようにメソッド呼び出しをラップするラッパーを作成します。
- (void) CallTimerWithTimeInterval:(float) interval andSelector:(NSString *)methodName { SEL selector = selectorFromString(methodName); [NSTimer scheduledTimerWithTimeInterval:interval target:self selector:@selector(selector) userInfo:nil repeats:YES]; }
このメソッドを呼び出して、要件に応じて間隔とセレクターメソッドを渡すことができます。
セレクターメソッドでそこからtimeinterval=0.1のセレクターを使用してタイマーを作成します。静的なフロート変数を保持してチェックし、次のように毎回0.1を追加できます。
static CGFloat counter= 0;
counter+= 0.1;
次に、カウンター値を確認し、urメソッドを呼び出します。
if(0.3 == counter)
{
[self callMethod1];
}
else if(0.5 == counter)
{
[self callMethod2];
}
else if(0.7 == counter)
{
[self callMethod3];
}
...
...
..
..