Iphone audioPlayerDidFinishPlaying如何知道哪个文件已完成?

Iphone audioPlayerDidFinishPlaying如何知道哪个文件已完成?,iphone,objective-c,ios,avaudioplayer,Iphone,Objective C,Ios,Avaudioplayer,我正在使用AVAudioPlayer播放15个音频文件。音频文件需要分5组播放,每组有三个文件。一个集合中的三个文件不会更改。播放布景的顺序可能会改变 我尝试使用while循环进行iPlaying,如下所示: while ([backgroundSound isPlaying]) { NSLog(@"First while loop"); } backgroundSoundPath = [[NSBundle mainBundle] pathForResource:@"Set0File1"

我正在使用AVAudioPlayer播放15个音频文件。音频文件需要分5组播放,每组有三个文件。一个集合中的三个文件不会更改。播放布景的顺序可能会改变

我尝试使用while循环进行iPlaying,如下所示:

while ([backgroundSound isPlaying]) {
    NSLog(@"First while loop");
}
backgroundSoundPath = [[NSBundle mainBundle] pathForResource:@"Set0File1" ofType:@"mp3"]; // *Music filename* 
backgroundSound =[[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:backgroundSoundPath] error:nil];
[backgroundSound prepareToPlay];
[backgroundSound play];
while ([backgroundSound isPlaying]) {
    NSLog(@"Second while loop");
}
backgroundSoundPath = [[NSBundle mainBundle] pathForResource:@"Set0File2" ofType:@"mp3"]; // *Music filename* 
backgroundSound =[[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:backgroundSoundPath] error:nil];
[backgroundSound prepareToPlay];
[backgroundSound play];
while ([backgroundSound isPlaying]) {
    NSLog(@"Third while loop");
} 
我现在意识到这是错误的,其副作用是,在播放文件的过程中,整个UI都被锁定

我知道我应该使用:

voidAudioPlayerDifinishPlaying:AVAudioPlayer*玩家成功:BOOLflag 但我不知道AudioPlayerDifinishPlay是如何确切地知道哪个文件已经播放完毕的

-(void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)player successfully:(BOOL)flag
{
     if ([player.url isEqual:url1])
     {
         // file which is in url1 stopped playing
     }
     else if ([player.url isEqual:url2])
     {
         // file which is in url2 stopped playing
     }
}
我认为这可能像-voidanimationDidStop,您可以使用valueForKeyPath来确定哪个文件已播放完毕

是否必须手动跟踪

任何能为我指明正确方向的建议都将不胜感激


谢谢。

当AVAudioPlayer调用AudioPlayerIDfinishPlay方法时,它将自身作为参数提供。因此,您应该检查URL以确定哪个文件刚刚播放完毕

-(void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)player successfully:(BOOL)flag
{
     if ([player.url isEqual:url1])
     {
         // file which is in url1 stopped playing
     }
     else if ([player.url isEqual:url2])
     {
         // file which is in url2 stopped playing
     }
}

当AVAudioPlayer调用AudioPlayerIDfinishPlay方法时,它将自身作为参数提供。因此,您应该检查URL以确定哪个文件刚刚播放完毕

-(void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)player successfully:(BOOL)flag
{
     if ([player.url isEqual:url1])
     {
         // file which is in url1 stopped playing
     }
     else if ([player.url isEqual:url2])
     {
         // file which is in url2 stopped playing
     }
}

这很有效。我曾经看到过其他关于url的提及,但忽略了它,认为它与文件名和路径无关。谢谢你的帮助,效果很好。我曾经看到过其他关于url的提及,但忽略了它,认为它与文件名和路径无关。谢谢你的帮助。