Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/120.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何设置具有更改延迟的NSTimer?_Ios_Objective C_Cocoa Touch - Fatal编程技术网

Ios 如何设置具有更改延迟的NSTimer?

Ios 如何设置具有更改延迟的NSTimer?,ios,objective-c,cocoa-touch,Ios,Objective C,Cocoa Touch,我想设置一个定时器,它有一个不断变化的延迟,存储在一个变量中。如果我在计时器中设置了一个计时器来更新延迟,那么我该怎么做呢?它根本不起作用。 谢谢没有重复计时器。使用一次运行计时器,当它完成/运行时,使用新的延迟创建另一个计时器 或者。。。正如@Steve Wilford在他的回答中指出的,在NSTimer上使用setFireDate:on。从文档中可以看出,“调整单个计时器的触发时间可能比创建多个计时器对象、在运行循环中安排每个计时器对象,然后销毁它们花费更少。”没有重复计时器。使用一次运行计

我想设置一个定时器,它有一个不断变化的延迟,存储在一个变量中。如果我在计时器中设置了一个计时器来更新延迟,那么我该怎么做呢?它根本不起作用。
谢谢

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


或者。。。正如@Steve Wilford在他的回答中指出的,在NSTimer上使用setFireDate:on。从文档中可以看出,“调整单个计时器的触发时间可能比创建多个计时器对象、在运行循环中安排每个计时器对象,然后销毁它们花费更少。”

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

或者。。。正如@Steve Wilford在他的回答中指出的,在NSTimer上使用setFireDate:on。从文档中可以看出,“调整单个计时器的触发时间可能比创建多个计时器对象、在运行循环中安排每个计时器对象,然后销毁它们花费更少。”

也许
NSTimer
的方法会有所帮助

注意这是一个“相对昂贵”的操作,所以你应该考虑这是否是你想要做的事情。

< P>也许<代码> NSTIMER < /C>会有帮助?


注意这是一个“相对昂贵”的操作,所以你应该考虑这是否是你想做的事情。

BuDEJavaIISA有正确的想法,但是你可能需要从主线程创建新的定时器。使用:

[self performSelectorOnMainThread:<#(SEL)#> withObject:<#(id)#> waitUntilDone:<#(BOOL)#>]
[自执行选择器OnMainThread:withObject:waitUntilDone:]

创建新计时器。

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

[self performSelectorOnMainThread:<#(SEL)#> withObject:<#(id)#> waitUntilDone:<#(BOOL)#>]
[自执行选择器OnMainThread:withObject:waitUntilDone:]

要在类接口中创建新计时器,请使用

@interface YourClass : SuperClass <Delegates> {
    NSTimer *yourTimer;
    NSInteger delay;
}
最后,在您的
方法调用中

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

   yourTimer = [NSTimer scheduledTimerWithTimeInterval:delay target:self selector:@selector(methodToCall) userInfo:nil repeats:false];
}
这意味着计时器必须运行下去,才能以新的延迟重新开始运行,因此如果您想要更即时的东西,这可能不是您想要的解决方案,但是更改
延迟将意味着当计时器运行下去时,它将以新的延迟重新开始

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


希望这对您有所帮助,或者可能会为您指明在类界面使用中需要的解决方案

@interface YourClass : SuperClass <Delegates> {
    NSTimer *yourTimer;
    NSInteger delay;
}
最后,在您的
方法调用中

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

   yourTimer = [NSTimer scheduledTimerWithTimeInterval:delay target:self selector:@selector(methodToCall) userInfo:nil repeats:false];
}
这意味着计时器必须运行下去,才能以新的延迟重新开始运行,因此如果您想要更即时的东西,这可能不是您想要的解决方案,但是更改
延迟将意味着当计时器运行下去时,它将以新的延迟重新开始

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


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

对此我有点困惑。那么这个方法是直接调用动画还是其他什么呢?不,使用这个调用调用一个方法,用你的新时间创建一个新的计时器。当旧计时器过期时调用它。NSTimer将在您最初发布它的同一个runloop上启动,因此您不需要使用performSelectorOnMainThread。对此我有点困惑。那么这个方法是直接调用动画还是其他什么呢?不,使用这个调用调用一个方法,用你的新时间创建一个新的计时器。当旧计时器过期时调用它。NSTimer将在最初发布它的同一个runloop上启动,因此不需要使用performSelectorOnMainThread。我喜欢这样。还要注意:“调整单个计时器的触发时间可能比创建多个计时器对象、在运行循环中调度每个计时器对象,然后销毁它们花费更少”。。。所以实际上你的答案比我的好。我喜欢这个。还要注意:“调整单个计时器的触发时间可能比创建多个计时器对象、在运行循环中调度每个计时器对象,然后销毁它们花费更少”。。。所以实际上你的答案比我的好。