我有一个旋钮IBAction,用于调节timeIntervalNSTimer

但是我找不到一种方法来使计时器在调整timeInterval时连续触发。我猜这是因为我不断使计时器无效并重新实例化,对吗?

有没有办法让它平稳地工作-以便计时器随着旋钮的运动而加速/减速?

-(IBAction)autoSpeed:(UISlider *)sender
{
    timeInterval = (60/sender.value) / 4;

    if (seqState){
        [self changeTempo];
    }

    [self displayBPM:[sender value]:[sender isTouchInside]];
}

-(void) changeTempo
{
    if (repeatingTimer!= nil) {
        [repeatingTimer invalidate];
        repeatingTimer = nil;
        repeatingTimer = [NSTimer scheduledTimerWithTimeInterval: timeInterval target:self selector:@selector(changeAutoSpeedLed) userInfo:nil repeats:YES];

    }
    else
        repeatingTimer = [NSTimer scheduledTimerWithTimeInterval: timeInterval target:self selector:@selector(changeAutoSpeedLed) userInfo:nil repeats:YES];
}

最佳答案

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


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


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

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


那么该代码将不会被用户界面阻止。

关于objective-c - 如何在调整timeInterval的同时让NSTimer继续-iOS,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14042472/

10-10 11:51