我有以下代码:
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.对此有什么解决方案吗?我试了很多,但不起作用。
发布于 2010-11-11 15:22:42
你当然可以做到。将repeats:YES更改为repeats:NO,这样计时器不会重复,然后在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语义...阅读文档以确保您不会泄密!
发布于 2010-11-11 15:22:22
你可以尝试调整定时器的FireDate,参见setFireDate
发布于 2016-10-21 20:34:56
这对我来说就像是魅力。
- (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]);
}https://stackoverflow.com/questions/4152097
复制相似问题