Как сделать цикл, который проверяет новые входные данные IBAction на каждой итерации? - PullRequest
0 голосов
/ 21 декабря 2011

Я хочу создать цикл, который воспроизводит звуковой файл (очень короткий звуковой сигнал) и ожидает время, равное задержке, затем повторяется, этот цикл выполняется до тех пор, пока я не нажму кнопку паузы, а задержку времени ожидания можно изменить с помощью ползунка в то время как цикл работает.

- (void)playSound 
{

NSURL *url = [NSURL fileURLWithPath:[NSString stringWithFormat:@"%@/Metronome-Sound.mp3", [[NSBundle mainBundle] resourcePath]]];
NSError *error;
audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:&error];

audioPlayer.numberOfLoops = 0;
[audioPlayer play];
}

- (IBAction)playSelected:(UIButton *)sender
{
if (stateOfMetronome == 0){
    stateOfMetronome = 1;
    while (stateOfMetronome == 1){   
        [self playSound];
        [NSThread sleepForTimeInterval:delay];
    }
} 
}


- (IBAction)pauseSeleted:(UIButton *)sender
{
if (stateOfMetronome == 1){
    stateOfMetronome = 0;
    [audioPlayer pause];
}
}

1 Ответ

2 голосов
/ 21 декабря 2011

Самый безболезненный способ добиться этого, я думаю, это использовать NSTimer , установленный для повтора. Когда вам нужно остановить / приостановить его, просто отключите таймер. Если вы хотите запустить его, просто заново инициализируйте его. Используя этот метод, вы можете безболезненно контролировать время стрельбы с задержкой, а также легко настраивать интервал.

Кроме того, имейте в виду, что вы можете потенциально заблокировать все взаимодействия с пользовательским интерфейсом, когда спите в потоке. Это может означать, что вы не можете воспроизводить / приостанавливать, когда поток спит, поскольку во время сна обработка цикла не выполняется. Подробнее см. NSThread .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...