我有一个旋钮IBAction
,用于调节timeInterval
的NSTimer
。
但是我找不到一种方法来使计时器在调整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/