停止来自不同班级的音频

时间:2014-12-09 00:55:51

标签: objective-c uiviewcontroller avaudioplayer

注意:我已经查看了其他问题,并且对它们的回答非常模糊或无益

我在View_Controller.h

中有这段代码
@property AVAudioPlayer *playerSaxophone;

然后我在同一个文件(viewDidLoad)中执行此操作:

NSURL *backgroundMusicSaxophone = [NSURL fileURLWithPath:
                          [[NSBundle mainBundle]
                           pathForResource:@"saxophone" ofType:@"wav"]];
self.playerSaxophone = [[AVAudioPlayer alloc]
          initWithContentsOfURL:backgroundMusicSaxophone error:nil];

self.playerSaxophone.numberOfLoops = -1;

[self.playerSaxophone setVolume:0.5];
[self.playerSaxophone play];

在另一个视图控制器中,我希望能够通过单击2按钮来停止或启动播放此音频。我有什么方法可以做到这一点吗?

编辑:我在"不同的"查看控制器.m文件

//I do import ViewController.h in this file
- (IBAction)stop:(id)sender {
    ViewController *viewController = [[ViewController alloc] initWithNibName:@"ViewController" bundle:nil];
    [viewController.playerSaxophone stop];
}

但它没有用。

1 个答案:

答案 0 :(得分:0)

您需要致电:

[playerSaxophone stop];

让音乐停止。

问题:另一个视图控制器不会引用playerSaxophone

您想要添加从另一个视图控制器引用此代码的代码意味着您必须找到一种方法来拥有三个对象 - 查看控制器A,视图控制器B和您的音频播放器 - 进行通信。

以下是一些选项:

  1. 使用委托模式让一个视图控制器告诉另一个视图控制器停止播放器。
  2. 与#1相同,但使用通知模式。 (如果您有第三名控制球员的位置,这是理想的选择。)
  3. 您可以将playerSaxophone移动到App Delegate或单身人士的@property。然后每个视图控制器都能找到它。
  4. 这些只是一些解决方案。还有其他人。

    补充阅读: