我有一个带3个视图控制器的应用程序。第一个产生一个5分钟的轨道,当它进入第二个视图时,它继续在setVolume:2.0
中播放,同样适用于第三个视图控制器。
但是在第三个ViewCOntroller
上有UIButton
重新生成第一个ViewController
。当它返回到第一个视图控制器时,它再次启动该声音,而前一个声音已经在播放,因此它是混音。
现在声音在init
上ViewController
那我怎么能在第三个ViewController
停止呢?有没有任何代码可以阻止所有声音播放?
答案 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:可能有拼写错误,从内存写入。