如何更改NSTimer的时间?

我有以下代码:

timer = [[NSTimer scheduledTimerWithTimeInterval:0.50 target:self selector:@selector(onTimer) userInfo:nil repeats:YES] retain]; -(void) onTimer { } 

每0.50秒后调用OnTimer方法。

但现在我想增加时间间隔。

这意味着:

 OnTimer calls after 0.55 OnTimer calls after 0.60 OnTimer calls after 0.65 OnTimer calls after 0.70 OnTimer calls after 0.75 & so on. 

这有什么解决方案吗? 我尝试了很多,但它不起作用。

当然你可以做到这一点。 更改repeats:YES repeats:NO以便计时器不重复,然后在onTimer ,只需启动一个具有更长间隔的新计时器。 你需要一个变量来保持你的间隔,这样你每次通过onTimer可以让它变长onTimer 。 此外,您可能不再需要保留计时器,因为它只会触发一次,当它发生时,您将获得一个新的计时器。

我不是Objective-C专家(或iOS专家……)而且已经有一段时间了,但我觉得这样的事情:

 float gap = 0.50; [NSTimer scheduledTimerWithTimeInterval:gap target:self selector:@selector(onTimer) userInfo:nil repeats:NO]; -(void) onTimer { gap = gap + .05; [NSTimer scheduledTimerWithTimeInterval:gap target:self selector:@selector(onTimer) userInfo:nil repeats:NO]; } 

那样的东西? 哦,我真的不太确定这里的retain语义…阅读文档以确保你不泄漏!

以下是使用NSTimer的fireDate属性(用Swift编写)的Hardik问题的一个解决方案:

 var timeInterval = 0.50 NSTimer.scheduledTimerWithTimeInterval(timeInterval, target: self, selector: Selector("onTimer:"), userInfo: nil, repeats: true) func onTimer(timer: NSTimer) { timeInterval += 0.05 timer.fireDate = timer.fireDate.dateByAddingTimeInterval(timeInterval) } 

您可以尝试调整计时器的FireDate,请参阅setFireDate

您无法更改计时器触发的间隔。 没门。 这样做没有API。

两个明显的解决方法:如果您总是更改间隔,那么您可以在下次定时器触发时更改; 这优先于定时器间隔。 当然,每次计时器触发时你都必须这样做。 如果您有时更改间隔,只需使第一个计时器无效并使用新间隔创建一个新计时器。

这对我来说就像魅力一样。

 - (void)FlexibleTimer { if (!keyTimer) { keyTimer = [NSTimer scheduledTimerWithTimeInterval:self.intervalOfIdleTimer target:self selector:@selector(keyTimerExceeded) userInfo:nil repeats:YES]; } else { if (fabs([keyTimer.fireDate timeIntervalSinceNow]) < self.intervalOfIdleTimer - 1.0) { [keyTimer setFireDate:[NSDate dateWithTimeIntervalSinceNow:self.intervalOfIdleTimer]]; } } } - (void)keyTimerExceeded { [self setNextDelayForFlexibleTimer]; [self FlexibleTimer]; NSLog(@"Timer Exceeded %f", [[NSDate date] timeIntervalSince1970]); }