如何在调整timeInterval - iOS时让NSTimer继续运行

时间:2012-12-26 15:15:47

标签: objective-c ios nstimer

我有一个旋钮IBAction可调整timeInterval的{​​{1}}。

但我无法在调整NSTimer时找到让计时器持续开火的方法。我想这是因为我不断地使计时器无效并重新实例化,对吧?

有没有办法让它顺利工作 - 这样定时器会通过旋钮运动加速/减速?

timeInterval

2 个答案:

答案 0 :(得分:1)

您可以在刻度线中重新创建计时器。


.h文件

你必须创建一个名为interval的属性。

@property NSTimeInterval interval; 

.m文件

首先,初始化它:

self.interval = 100;
[self timerTick];

然后,您可以使用timerTick方法重新创建计时器

- (void)timerTick {
    if (self.interval) {
        [self.timer invalidate];
        self.timer = [NSTimer scheduledTimerWithTimeInterval:self.interval target:self selector:@selector(timerTick) userInfo:nil repeats:YES];
        self.interval = 0;
    }


    // Do all the other stuff in the timer
}

然后您可以随时设置self.interval,并自动重新创建计时器。

答案 1 :(得分:1)

它运行不顺畅的原因是因为你正在使用scheduledTimerWithTimeInterval:target:selector:userInfo:repeats:,根据Apple的文档:

  

创建并返回一个新的NSTimer对象,并在默认模式下在当前运行循环上安排它。

默认模式被UI交互阻止,因此如果您正在控制旋钮,则会阻止计时器。如果您改为使用以下代码:

[[NSRunLoop currentRunLoop] addTimer:repeatingTimer forMode:NSRunLoopCommonModes];

然后UI不会阻止代码。