我想设置一个具有不断变化的延迟的计时器,该计时器存储在一个变量中。如果我在计时器中设置一个计时器来更新延迟,我将如何做到这一点,它根本不起作用。谢谢
问问题
256 次
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 回答