如何更改NSTimer的时间?

Har*_*tel 19 objective-c nstimer ios

我有以下代码:

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

-(void) onTimer 
{
}
Run Code Online (Sandbox Code Playgroud)

每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.
Run Code Online (Sandbox Code Playgroud)

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

hea*_*ide 21

当然你可以做到这一点.更改repeats:YESrepeats: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];
}
Run Code Online (Sandbox Code Playgroud)

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


Dan*_*rna 6

以下是使用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)
}
Run Code Online (Sandbox Code Playgroud)