実行するたびにNSTimer間隔を減らす

cocoa nstimer objective-c
実行するたびにNSTimer間隔を減らす

NSTimerを実行するたびに高速化したい

-(void)runtimer {
   int delay = delay - 1;
   [NSTimer scheduledTimerWithTimeInterval:(delay)
                                    target:self
                                  selector:@selector(timerTriggered:)
                                  userInfo:nil
                                   repeats:YES];

}

しかしこれはうまくいきません。 遅延を小さくし続けるにはどうすればよいですか?

  0  1


ベストアンサー

私はhttps://blog.compeople.eu/apps/?p=368 [自分で必要]とhttps://github.com/yangmeyer/CPAccelerationTimer[CPAccelerationTimer(Github)]のコンポーネントを作成しました。

[[CPAccelerationTimer accelerationTimerWithTicks:20
    totalDuration:10.0
    controlPoint1:CGPointMake(0.5, 0.0) // ease in
    controlPoint2:CGPointMake(1.0, 1.0)
    atEachTickDo:^(NSUInteger tickIndex) {
        [self timerTriggered:nil];
    } completion:^{
        [self timerTriggered:nil];
    }]
run];

これは、 `-timerTriggered:`を20回呼び出し、10秒にわたって広がり、遅延がますます小さくなります(指定されたベジエ曲線で指定)。

3


このメソッドが実行されるたびに、 `delay`という新しい変数を作成し、それから1を引いた値に設定しようとします。 これは未定義の動作であり(変数は何にも初期化されていません)、 `delay`のゴミ値になる可能性があります。*

インスタンス変数に遅延を保存する必要があります。

- (void) runTimer {
    // You are declaring a new int called |delay| here.
    int delay = delay - 1;
    // This is not the same |delay| that you have declared in your header.
    // To access that variable, use:
    delay = delay - 1;

” ” ‘

  • http://catb.org/jargon/html/N/nasal-demons.html [悪に同調した超自然的な存在による副鼻腔への侵入]も可能です。

1


タイマーを作成すると、タイマーの起動間隔を変更することはできません。 異なる間隔が必要な場合は、以前のタイマーを無効にし(したがって、参照を保持する必要があります)、異なる間隔で新しいタイマーを作成する必要があります。

0


クラスインターフェイスまたは静的変数のように、遅延をどこかで宣言する必要があります。

また、繰り返すのではなく、毎回新しいタイマーを作成します。

int delay = INITIAL_DELAY;

-(void)runtimer{
    [NSTimer scheduledTimerWithTimeInterval:(NSTimeInterval)(delay--) target:self selector:@selector(runTimer:) userInfo:nil repeats:NO];
}

0


タイトルとURLをコピーしました