0

我想设置一个具有不断变化的延迟的计时器,该计时器存储在一个变量中。如果我在计时器中设置一个计时器来更新延迟,我将如何做到这一点,它根本不起作用。谢谢

4

4 回答 4

2

没有重复计时器。使用一次运行计时器,当它完成/运行时,创建另一个具有新延迟的计时器。

或者...正如@Steve Wilford 在他的回答中指出的那样,在 NSTimer 上使用 setFireDate:。来自文档“调整单个计时器的触发时间可能会比创建多个计时器对象、在运行循环中调度每个对象然后销毁它们产生更少的费用。”

于 2013-09-24T16:28:16.490 回答
1

在您的类界面中使用

@interface YourClass : SuperClass <Delegates> {
    NSTimer *yourTimer;
    NSInteger delay;
}

当你设置你的计时器时,请确保你设置

delay = 1.0;
yourTimer = [NSTimer scheduledTimerWithTimeInterval:delay target:self selector:@selector(methodToCall) userInfo:nil repeats:false];

最后在你的methodToCall

-(void)methodToCall {
   // Do stuff and reset timer with delay variable

   yourTimer = [NSTimer scheduledTimerWithTimeInterval:delay target:self selector:@selector(methodToCall) userInfo:nil repeats:false];
}

这意味着计时器必须用完才能重新开始运行,并有一个新的延迟,所以如果你想要更即时的东西,这可能不完全是你想要的解决方案,但是改变delay意味着当计时器用完时它会再次开始随着你的新延迟

这也仍然允许您调用[yourTimer invalidate]并且没有没有指针的重复计时器

希望有帮助,或者可能会指出您正在寻找的解决方案

于 2013-09-24T18:31:23.403 回答
0

也许setFireDate:方法NSTimer会有所帮助?

请注意,这是一个“相对昂贵”的操作,因此您应该考虑这是否真的是您想要做的。

于 2013-09-24T16:29:11.563 回答
0

bandejapaisa 有正确的想法,但您可能需要从主线程创建新计时器。利用:

[self performSelectorOnMainThread:<#(SEL)#> withObject:<#(id)#> waitUntilDone:<#(BOOL)#>]

创建新的计时器。

于 2013-09-24T16:30:47.763 回答