【发布时间】:2014-03-08 22:37:33
【问题描述】:
我正在使用NSTimer,在某些情况下,我希望在调用NSTimer 方法之前加倍。
基本上:如果我将它设置为每 0.5 秒调用一次,我想偶尔延迟它,以便在下次调用之前等待 1.0 秒(时间的两倍)。
但是,我在实现这一点时遇到了很大的困难。这是我最初的尝试:
- (void)viewDidLoad
{
[super viewDidLoad];
[NSTimer scheduledTimerWithTimeInterval:0.5
target:self
selector:@selector(timerMethod:)
userInfo:nil
repeats:YES];
}
- (void)timerMethod:(NSTimer *)timer {
static int variable = 1;
switch (variable) {
case 1:
self.stopLightLabel.textColor = [UIColor redColor];
break;
case 2:
self.stopLightLabel.textColor = [UIColor orangeColor];
break;
case 3:
self.stopLightLabel.textColor = [UIColor yellowColor];
break;
case 4: // Stop for twice as long here
self.stopLightLabel.textColor = [UIColor greenColor];
NSTimeInterval timeBetweenNowAndFireDate = [timer.fireDate timeIntervalSinceNow];
// Create a new date that is twice as far in the future in order to give a long pause
timer.fireDate = [NSDate dateWithTimeIntervalSinceNow:(timeBetweenNowAndFireDate * 2)];
break;
case 5:
self.stopLightLabel.textColor = [UIColor blueColor];
break;
case 6:
self.stopLightLabel.textColor = [UIColor purpleColor];
break;
default:
break;
}
variable++;
}
我尝试获取现在与计时器何时触发之间的时间量。在上面的示例中,这应该是0.5。然后我将fireDate 设置为一个新值,是之前的两倍。
但是,这不起作用。
如果没有这个条件,计时器可以正常工作,但显然不会在某种情况下延迟(在这种情况下,它得到的时间与其他所有情况相同)。
有了条件,它甚至显得更短!事实上,直到我将它乘以大约 400 而不是 2,它才变得更长!
我在这里做错了什么?
【问题讨论】:
-
为什么不直接将条件添加到被调用的选择器来决定是否运行,然后您根本不必摆弄计时器
-
您在调试时看到的时间间隔的实际值是多少?
-
你什么时候做这个 :) 请给我们看更多代码
-
@Paul.s 因为
fireDate实例变量正是为此目的而创建的... -
@Daij-Djan 这是一个完整的项目:cl.ly/0q0L3R2X2E3y
标签: ios objective-c cocoa-touch nstimer