播放音乐问题

时间:2014-06-18 11:44:43

标签: ios objective-c

我的游戏背景音乐有问题。当我的初始视图控制器加载时,它播放歌曲并循环播放。我想这样做,当我换到另一个视图控制器时,它会停止播放歌曲。

目前我已经使用主视图控制器上的按钮进行了IBAction,当我按下它时成功停止音乐但是如果我在按下之前加载初始视图两次,它将不会停止音乐。

初始视图控制器实现文件的代码:

- (void)viewDidLoad
{
    NSString *music = [[NSBundle mainBundle] pathForResource:@"beat" ofType:@"wav"];
    MusicPlay=[[AVAudioPlayer alloc]initWithContentsOfURL:[NSURL fileURLWithPath:music] error:NULL];
    MusicPlay.delegate=self;
    MusicPlay.numberOfLoops=-1;

    MusicSituation = MusicSituation + 1;

    if(MusicSituation == 1)

        [MusicPlay play];

    }

IBAction代码:

- (IBAction)StartGame:(id)sender {        
    [MusicPlay stop];
}

2 个答案:

答案 0 :(得分:0)

首先,viewDidLoad中的代码应该能够多次运行而不会出现任何问题。如果您检查apple docs,您会看到某些操作可以重新加载视图。

在创建另一个AVAudioPlayer实例之前,首先检查MusicPlay是否为nil:

- (void)viewDidLoad
{
    NSString *music = [[NSBundle mainBundle] pathForResource:@"beat" ofType:@"wav"];

    if (MusicPlay==nil){
      MusicPlay=[[AVAudioPlayer alloc]initWithContentsOfURL:[NSURL fileURLWithPath:music] error:NULL];
      MusicPlay.delegate=self;
      MusicPlay.numberOfLoops=-1;

      MusicSituation = MusicSituation + 1;

      if(MusicSituation == 1)

          [MusicPlay play];

      }
   }  

你也应该考虑你的应用程序中发生的事情,以便调用viewDidLoad两次。

答案 1 :(得分:0)

嗯,肯定需要更多信息,例如"你如何导航你的控制器?"。

正如评论中所说:你是什么意思"如果我加载初始视图两次"?

但是您设置播放器的方式很好,您可以按原样保留代码并对以下内容进行更改:

[Music play];移除viewDidLoad,然后将其放入viewDidAppear

然后,在[Music stop];中添加viewWillDisappear

如果您按上述方法执行操作,我认为您也可以删除MusicSituation,因为我认为这是您在实施后设置的检查,以确保声音随您所需而消失至。使用上述方法,您将不再需要它。

希望这有帮助。