5

在不创建多个NSTimer实例的情况下,如何实现NSTimer以序列中不同的间隔触发特定或多个方法。例如方法 1(0.3 秒)、方法 2(0.5)、方法 3(0.7)等。

如果有人可以分享任何示例代码,我将不胜感激。

4

5 回答 5

6

我不确定您的最终目标是什么,但是在阅读了您的问题后,我建议您尝试以下方式,也许这就是您要寻找的。

你应该把这段代码放在你通常想要以NSTimer不同的间隔开始同一个类的地方(不幸的是,这是不可能的)。

{
    // ...
    [self performSelector:@selector(method1) withObject:nil afterDelay:0.3f];
    [self performSelector:@selector(method2) withObject:nil afterDelay:0.5f];
    [self performSelector:@selector(method3) withObject:nil afterDelay:0.7f];
    // ...
}

当需要取消调度所有排队的选择器时,请使用此代码。

[NSObject cancelPreviousPerformRequestsWithTarget:self];
于 2012-07-18T08:27:37.980 回答
4

NSTimer它本身不提供该功能,它会以固定的时间间隔触发一次或重复触发。您将需要多个计时器来实现此效果,或者完全远离NSTimer

于 2012-07-18T07:53:04.703 回答
0

我相信您应该将当前时间间隔传递给触发的选择器并在那里进一步处理它。如果时间间隔是 0.3,你调用 method1, 0.5 - method2,很可能没有其他方法可以实现这个

于 2012-07-18T07:58:06.410 回答
-1

制作一个包装器来包装NSTimer方法调用,如下所示:

- (void) CallTimerWithTimeInterval:(float) interval andSelector:(NSString *)methodName 
{
SEL selector = selectorFromString(methodName);
    [NSTimer scheduledTimerWithTimeInterval:interval target:self selector:@selector(selector) userInfo:nil repeats:YES];
}

您可以调用此方法并根据您的要求传递间隔和选择器方法。

于 2012-07-18T08:09:46.727 回答
-3

在选择器方法中从那里创建一个带有 timeinterval = 0.1 的选择器的计时器,您可以通过保留一个静态浮点变量并每次添加 0.1 来检查,例如:

static CGFloat counter= 0;

counter+= 0.1;

然后检查计数器值并调用你的方法..

if(0.3 == counter)
{
    [self callMethod1];
}
else if(0.5 == counter)
{
    [self callMethod2];
}
else if(0.7 == counter)
{
    [self callMethod3];
}
...
...
..
..
于 2012-07-18T07:56:44.733 回答