NSTimer,序列中有多个时间间隔

时间:2012-07-18 07:45:59

标签: objective-c ios nstimer intervals

如果不创建多个NSTimer实例,如何在序列中以不同的间隔触发特定或多个方法的NSTimer。例如method1(0.3秒),method2(0.5),method3(0.7)等。

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

5 个答案:

答案 0 :(得分:5)

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

你应该将这段代码放在通常想要以不同间隔开始相同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];

答案 1 :(得分:4)

NSTimer本身不提供该功能,它会以固定间隔一次或多次触发。您需要多个计时器才能达到此效果,或者完全远离NSTimer

答案 2 :(得分:0)

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

答案 3 :(得分:-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];
}

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

答案 4 :(得分:-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];
}
...
...
..
..