0

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

有什么想法吗?

 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{

    }
4

2 回答 2

0

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

如果您正在推动(或从子级向父级进行转场......即循环转场),则您正在创建父级视图控制器的新实例。

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

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

于 2013-04-15T17:18:44.137 回答
0

取决于您如何设置 AVAudioPlayer,使用手动设置器和获取器,使用属性甚至在构造函数中。你面临一些问题。

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

返回主视图并尝试再次设置相同的 ViewController 后,我猜您并没有尝试将相同的实例推送到堆栈中。而是创建一个新实例并将其推入堆栈?这也使得 AVAudioPlayer。

这是因为看不到整个代码,所以有点猜测。但如果是这种情况,我认为你可以设置得更好一些。确保 ViewController 被正确地释放并释放它的所有属性,然后再创建一个新实例以推送到堆栈。

于 2013-04-15T17:23:20.090 回答