2013-07-17 4 views
0

Я смотрел на тему re: обнаружение голоса (http://mobileorchard.com/tutorial-detecting-when-a-user-blows-into-the-mic/).Два NSTimers с одним управляющим деятельностью другого?

Я ищу для реализации чего-то подобного, однако, со следующим вариантом.

levelTimer в этом примере срабатывает непрерывно каждые 0,3 секунды. Мне по существу нужно обернуть еще один таймер, чтобы процесс проверки голоса выполнялся только (скажем) 10 секунд.

Я нахожу, что иметь что-то вроде:

outerTimer = [NSTimer scheduledTimerWithTimeInterval:10.0 
               target:self 
              selector:@selector(outerTimerFinished:) 
              userInfo:nil 
              repeats:NO]; 

levelTimer = [NSTimer scheduledTimerWithTimeInterval:0.03 
               target:self 
              selector:@selector(listenForSounds:) 
              userInfo:nil 
              repeats:YES]; 

... где outerTimerFinished метод вызывает [levelTimer invalidate] не работает - возможно, из-за блокирования потоков?

Так может кто-то помочь мне определить способ для levelTimer выполнять свою работу, но только на определенное количество времени?

Спасибо.

+0

Я опубликовал другой способ, но я проверил ваш метод, и это сработало для меня. Что вы делаете внутри listenForSounds :? – rdelmar

ответ

0

Поместите счетчик в метод listenForSounds: и увеличивайте его каждый раз, когда вызывается метод. Если вы хотите запустить levelTimer в течение 10 секунд, скажите, тогда проверьте, когда счетчик> 333, а затем аннулирует таймер.

Смежные вопросы