Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/93.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 播放音乐的问题_Ios_Objective C - Fatal编程技术网

Ios 播放音乐的问题

Ios 播放音乐的问题,ios,objective-c,Ios,Objective C,我的游戏背景音乐有问题。当我的初始视图控制器加载时,它会播放歌曲并很好地循环。我希望这样,当我切换到其他视图控制器时,它会停止播放歌曲 目前,我已使用主视图控制器上的一个按钮进行了IBAction,当我按下它时,该按钮会成功停止音乐,但如果在按下之前加载两次初始视图,它将不会停止音乐 初始视图控制器实现文件的代码: - (void)viewDidLoad { NSString *music = [[NSBundle mainBundle] pathForResource:@"beat"

我的游戏背景音乐有问题。当我的初始视图控制器加载时,它会播放歌曲并很好地循环。我希望这样,当我切换到其他视图控制器时,它会停止播放歌曲

目前,我已使用主视图控制器上的一个按钮进行了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];

    }
iAction的代码:

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

首先,viewDidLoad中的代码应该能够在没有任何问题的情况下运行多次。如果您查看apple文档,您将看到一些操作可以使视图重新加载

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

- (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会被调用两次。

当然,你需要更多的信息,比如“你是如何导航你的控制器的?”

正如在评论中被问到的:“如果我加载初始视图两次”是什么意思

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

删除
[音乐播放]
视图加载
并将其放置在
视图显示

然后,添加
[音乐停止]视图中的code>将消失

如果您按照上面提到的那样做,我想您也可以删除
音乐场景
,因为我假设,这是您在实现后设置的检查,目的是确保声音按您希望的那样发出。使用上述方法,您将不再需要它


希望这能有所帮助。

如果我加载两次初始视图,你是什么意思?我有一个设置页面,你可以从主控制器转到该页面,当我从主控制器返回时,它会再次加载视图。非常感谢,这正是我所需要的!只是一个简单的问题,如果我想让它通过另一个视图控制器继续播放,我该怎么办?@user3752308在这种情况下,我建议根本不要停止音频,让它简单地播放。我基本上希望音乐在主设置和视图控制器中播放,但在进入游戏视图控制器时停止