我希望我的NSTimer
每次运行都加快速度:
-(void)runtimer {
int delay = delay - 1;
[NSTimer scheduledTimerWithTimeInterval:(delay)
target:self
selector:@selector(timerTriggered:)
userInfo:nil
repeats:YES];
}
但这不起作用。如何让延迟变得越来越小?
答案 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];
}