Каков наилучший способ справиться с этой ситуацией на устройстве 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 было разрешение 100 мс или около того, но я еще не тестировал его (возможно, это было неправильно). Разумеется, такая резолюция не сможет сделать плавный скат. – materialvision
Вы правы, документация на яблоки говорит примерно о 50-100 мс. Точное разрешение зависит также от того, что еще происходит в вашем цикле запуска. Я попробую таймер и посмотрю, достаточно ли это. В противном случае вам, вероятно, придется использовать другой поток. – Sven
Да, такой временной интервал не будет работать с шагом, так как он должен быть очень плавным. Поэтому мне тогда нужно будет заглянуть в поток. , , – materialvision