Я бы хотел управлять экземпляром AVAudioPlayer из элемента UITableView в экземпляре didSelectRowAtIndexPath.
Первое касание элемента строки вызывает «воспроизведение» AVAudioPlayer.Второе прикосновение к элементу строки вызывает «останов» AVAudioPlayer.
Я могу заставить «играть» работать, но не могу заставить работать «стоп».Кроме того, последующее прикосновение к элементу строки запускает другой поток аудио в фоновом режиме.
Каков наилучший способ гарантировать, что 1 нажатие запускает звук, а 2-е нажатие останавливает его?
Примеры кода- этот метод подготавливает аудиофайл и AVAudioPlayer для использования:
- (void)makeReadyAudio {
NSString *path = [[NSBundle mainBundle] pathForResource:@"Murderers" ofType:@"mp3"];
NSURL *url = [NSURL fileURLWithPath:path];
NSError *error;
musicPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:&error];
[musicPlayer prepareToPlay];
}
Этот блок запускает и останавливает AVAudioPlayer в операторе case в разделе didSelectRowAtIndexPath:
case 7: {
//touch to start audio sound playing, touch again to stop playing
[self makeReadyAudio];
if ([musicPlayer isPlaying]) {
[musicPlayer stop];
NSLog(@"musicPlayer tested to be playing, so stop it.");
} else {
[musicPlayer play];
NSLog(@"musicPlayer tested to be *not* playing, so play it.");
}
break;
}