每次运行时减少NSTimer间隔

时间:2011-10-25 21:44:36

标签: objective-c cocoa nstimer

我希望我的NSTimer每次运行都加快速度:

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

}

但这不起作用。如何让延迟变得越来越小?

4 个答案:

答案 0 :(得分:3)

needed this myself并写了一个组件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秒,延迟时间不断减少(由给定的Bézier曲线指定)。

答案 1 :(得分:1)

每次运行此方法时,都会创建一个名为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;

* A sinus infestation by evil-aligned supernatural beings也是可能的。

答案 2 :(得分:0)

创建计时器后,您无法更改计时器的开火间隔。如果你想要一个不同的间隔,你必须使前一个计时器无效(因此你应该保留对它的引用),并创建一个具有不同间隔的新计时器。

答案 3 :(得分:0)

您必须在某处声明延迟,例如在类接口中或作为静态变量。

此外,每次都要创建一个新的计时器,而不是重复它。

int delay = INITIAL_DELAY;

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