在iPhone设备上处理这种情况的最佳方式是什么:我的程序在两个值之间调整音高。按下按钮调用一个具有while循环的方法,以小增量进行渐变。完成需要一些时间。与此同时,用户按下另一个按钮调用相同的方法。现在我想让第一次调用的循环停止,第二次从当前状态开始。下面是类似的方法应该是什么样子:如何处理类方法在完成之前再次被调用?
-(void)changePitchSample: (float) newPitch{
float oldPitch=channel.pitch;
if (oldPitch>newPitch) {
while (channel.pitch>newPitch) {
channel.pitch = channel.pitch-0.001;
}
}
else if (oldPitch<newPitch) {
while (channel.pitch<newPitch) {
channel.pitch = channel.pitch+0.001;
}
}
}
现在如何最好地处理这种情况的方法再次被调用的情况呢?我需要某种多线程吗?我不需要同时进行两个进程,所以似乎必须有一些我找不到的简单解决方案(对这种语言来说是新的)。
任何帮助非常感谢!
谢谢。我在某处读到NSTimer的分辨率为100ms左右,但我没有自己测试(可能是错误的)。这种分辨率当然不能平稳上升。 – materialvision 2010-09-03 06:20:52
你说得对,苹果的文档说了大约50-100毫秒。确切的分辨率还取决于你的运行循环中发生了什么。我会尝试计时器,看看它是否足够好。否则,你可能不得不使用另一个线程。 – Sven 2010-09-03 06:31:57
是的,那种时间间隔不适用于音高,因为它需要非常平滑。所以我需要继续研究线程。 。 。 – materialvision 2010-09-03 06:41:24