Nesta linha
appDelegate.audioPlayer = [[AVPlayer alloc] init];
Você parece estar alocando e iniciando um novo avplayer. Como tal, não é de surpreender que você obtenha um resultado "não tocando". Basta deixar de fora essa linha.
Pergunta
Eu tenho uma visão de mesa das músicas no dispositivo iOS e, se selecionar uma linha, pressiono para uma nova visualização em que o AvPlayer começa a tocar a música selecionada. Agora, se eu voltar e selecionar outra linha, pressionando a exibição, o aplicativo começará a tocar a nova música, enquanto continuará tocando a que já estava em execução.
EDIT: Tentei usar o valor da taxa como esse sem sucesso, pois ele sempre produzirá "não tocando" se eu o colocar no meu método ViewDidload, mesmo que uma música esteja tocando:
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
appDelegate = (SimpleTableAppDelegate *)[[UIApplication sharedApplication] delegate];
appDelegate.audioPlayer = [[AVPlayer alloc] init];
if (appDelegate.audioPlayer.rate == 0.0f)
{
NSLog(@"not playing");
} else {
NSLog(@"already playing");
}
}
Solução
Nesta linha
appDelegate.audioPlayer = [[AVPlayer alloc] init];
Você parece estar alocando e iniciando um novo avplayer. Como tal, não é de surpreender que você obtenha um resultado "não tocando". Basta deixar de fora essa linha.
Outras dicas
Avplayer tem um rate
Propriedade que indica a velocidade da reprodução como uma bóia. 0.0f
indica parado. o play
e stop
métodos apenas mudam o rate
propriedade.
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
appDelegate = (SimpleTableAppDelegate *)[[UIApplication sharedApplication] delegate];
//Stop potential existing audioPlayer prior to creating new player
[appDelegate.audioPlayer stop];
//Create new audio player
appDelegate.audioPlayer = [[AVPlayer alloc] init];
}