切换视图时AVMusic会播放两倍

时间:2013-04-15 17:04:15

标签: ios objective-c avaudioplayer

当我切换视图时,音乐会继续播放背景,这对我的应用程序来说很好。但是当用户回到初始视图时,音乐再次从原始视图开始,因此用户听到音乐加倍。我已经有一些代码来检查声音是否已经播放但它不起作用。 :(

有什么想法吗?

 if (audioPlayer.playing == 0 ) {
    NSURL *url = [NSURL fileURLWithPath:[NSString stringWithFormat:@"%@/CheeZeeLab.mp3", [[NSBundle mainBundle] resourcePath]]];

    NSError *error;
    audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:&error];
    audioPlayer.numberOfLoops = 0;
    audioPlayer.volume = 1;
    [audioPlayer prepareToPlay];



    [audioPlayer stop];
    if (audioPlayer == nil)
        NSLog(@"werkt niet");
    else
        [audioPlayer play];    }
else{

    }

2 个答案:

答案 0 :(得分:0)

我打赌你的问题在于如何转换回初始视图。

如果你正在推动(或从孩子那里做一个segue回到父...即循环segue),你就是在创建父视图控制器的新实例。

创建一个新实例会启动播放该声音的音频播放器的新版本。

您需要正确弹出视图才能返回上一个视图控制器。

答案 1 :(得分:0)

取决于您如何设置AVAudioPlayer,使用手动setter和getter,具有属性或甚至在构造函数中。你遇到了一些问题。

初始化ViewController时,您正在分配一个AVAudioPlayer,如果它继续播放,则它不会被解除分配,并且仍然保留。并且在每个属性的保留计数为0之前,不会释放ViewController。

回到主视图后,再次尝试设置相同的ViewController,我的猜测是你没有尝试将同一个实例推送到堆栈。而是制作一个新实例并将其推入堆栈?这也是一个AVAudioPlayer。

这是一种猜测,因为无法看到整个代码。但如果是这种情况,我认为你可以把事情做好一些。确保ViewController正确解除分配并释放所有属性,然后再将新实例推送到堆栈。