首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何更改NSTimer的计时?

如何更改NSTimer的计时?
EN

Stack Overflow用户
提问于 2010-11-11 15:06:28
回答 3查看 14K关注 0票数 19

我有以下代码:

代码语言:javascript
复制
timer = [[NSTimer scheduledTimerWithTimeInterval:0.50 target:self selector:@selector(onTimer) userInfo:nil repeats:YES] retain];    

-(void) onTimer 
{
}

每隔0.50秒就会调用一次OnTimer方法。

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

这意味着:

代码语言:javascript
复制
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.

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-11-11 15:22:42

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

我不是Objective-C专家(或iOS专家...)已经有一段时间了,但我认为是这样的:

代码语言:javascript
复制
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语义...阅读文档以确保您不会泄密!

票数 21
EN

Stack Overflow用户

发布于 2010-11-11 15:22:22

你可以尝试调整定时器的FireDate,参见setFireDate

票数 4
EN

Stack Overflow用户

发布于 2016-10-21 20:34:56

这对我来说就像是魅力。

代码语言:javascript
复制
- (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]);
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4152097

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档