AVAudioPlayer停止在不同视图控制器上播放的所有声音

时间:2015-01-30 07:34:44

标签: ios objective-c iphone avaudioplayer

我有一个带3个视图控制器的应用程序。第一个产生一个5分钟的轨道,当它进入第二个视图时,它继续在setVolume:2.0中播放,同样适用于第三个视图控制器。

但是在第三个ViewCOntroller上有UIButton重新生成第一个ViewController。当它返回到第一个视图控制器时,它再次启动该声音,而前一个声音已经在播放,因此它是混音。

现在声音在initViewController那我怎么能在第三个ViewController停止呢?有没有任何代码可以阻止所有声音播放?

2 个答案:

答案 0 :(得分:1)

您可以在第一个ViewController中将AVAudioPlayer声明为全局变量。效果将是您的第一个ViewController的每个实例都能够共享同一个播放器。

AVAudioPlayer *player;

之后你可以在ViewDidLoad中执行类似的操作:

if (!player) {
   AVAudioPlayer *player = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:&error];
   [player play];
} else if (!player.playing) {
   [player play];
}

答案 1 :(得分:1)

您可以创建一个共享实例,并从所有viewController调用。所以你可以参考何时停止/播放/加载等等。

@interface MainAVPlayer : AVAudioPlayer
+ (instancetype)shared;
@end

@implementation MainAVPlayer
+ (instancetype)shared {
  static id _sharedInstance = nil;
  static dispatch_once_t oncePredicate;
  dispatch_once(&oncePredicate, ^{
    _sharedInstance = [[self alloc] init];
  });
  return _sharedInstance;
}
@end

从其他视图控制器调用时访问:

[[MainAVPlayer shared] initWithContentsOfURL:url error:&error];
[[MainAVPlayer shared] play];

p / s:可能有拼写错误,从内存写入。