iOS 5 AVAudioPlayer - как правильно остановить воспроизведение? - PullRequest
0 голосов
/ 09 ноября 2011

Я использую iOS 5 с включенной ARC. Я проигрываю запись, связанную с определенным видом, когда этот вид касается. Когда пользователь меняет представления, воспроизведение останавливается. Я использовал NSNotification для вызова метода -stopPlayback, который работает нормально. Проблема в том, что когда пользователь возвращается к исходному виду и нажимает на него, он продолжается там, где остановилась запись.

С отключенной ARC я мог бы использовать следующий код:

-stopPlayback
{
 if([audioPlayer isPlaying])
 {
 [audioPlayer stop];
 [audioPlayer release];
 audioPlayer = nil;
 }
}

Поскольку ARC не разрешает [выпуск audioPlayer], я не могу сбросить воспроизведение с самого начала. Я удалил [releaseP audioPlayer] и audioPlayer = nil; так как ARC будет обрабатывать его, и результатом будет воспроизведение записи там, где она была остановлена ​​после предыдущей остановки. Я не вижу хороших примеров или документации от Apple о том, как перезапустить запись с самого начала, когда происходит воспроизведение. Как лучше поступить?

Ответы [ 2 ]

0 голосов
/ 10 ноября 2011

Это решение, которое я придумал:

-stopPlayback{  
 if([audioPlayer isPlaying])
 {
   [audioPlayer stop];
   audioPlayer.currentTime=0;
 }
}

Запись теперь воспроизводится с самого начала, независимо от того, когда она была остановлена.Я попытался использовать [пауза аудиоплеера] вместо [остановка аудиоплеера], из-за чего воспроизведение не воспроизводилось после начальной паузы.Похожая вещь произошла, когда я добавил 'audioPlayer = nil;(хотя я не документировал точную комбинацию).Соответствующий вопрос, опубликованный как часть ответа, использовал currentTime = 0, но остальная часть кода не соответствовала моим потребностям.Кто-нибудь может понять, почему это не сработает?Любые дальнейшие комментарии приветствуются.

0 голосов
/ 09 ноября 2011

Вам все еще нужно установить значение nil:

if([audioPlayer isPlaying])
{
    [audioPlayer stop];
    audioPlayer = nil;
}
...