AVAudioPlayer 停止在不同视图控制器上播放的所有声音
AVAudioPlayer stop all sounds playing on different view controllers
我有一个带有 3 个视图控制器的应用程序。第一个生成一个 5 分钟的曲目,当它进入第二个视图时,它继续在 setVolume:2.0
中播放,第三个视图控制器也是如此。
但是在第三个 ViewCOntroller
有一个 UIButton
重新生成第一个 ViewController
。当它返回到第一个视图控制器时,它会再次启动该声音,而前一个已经在播放,所以它是一个混音。
现在第一个 [=13] 上的声音是 init
=] 那么我怎样才能在第三个 ViewController
上停止它呢?是否有任何代码可以停止播放所有声音?
您可以在第一个 ViewController 中将 AVAudioPlayer 声明为全局变量。结果是您的第一个 ViewController 的每个实例都将能够共享同一个玩家。
AVAudioPlayer *player;
之后你可以在 ViewDidLoad 中做这样的事情:
if (!player) {
AVAudioPlayer *player = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:&error];
[player play];
} else if (!player.playing) {
[player play];
}
您可以创建共享实例并被所有 viewController 调用。所以可以参考什么时候stop/play/load等
@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: 可能有错别字,凭记忆写的
我有一个带有 3 个视图控制器的应用程序。第一个生成一个 5 分钟的曲目,当它进入第二个视图时,它继续在 setVolume:2.0
中播放,第三个视图控制器也是如此。
但是在第三个 ViewCOntroller
有一个 UIButton
重新生成第一个 ViewController
。当它返回到第一个视图控制器时,它会再次启动该声音,而前一个已经在播放,所以它是一个混音。
现在第一个 [=13] 上的声音是 init
=] 那么我怎样才能在第三个 ViewController
上停止它呢?是否有任何代码可以停止播放所有声音?
您可以在第一个 ViewController 中将 AVAudioPlayer 声明为全局变量。结果是您的第一个 ViewController 的每个实例都将能够共享同一个玩家。
AVAudioPlayer *player;
之后你可以在 ViewDidLoad 中做这样的事情:
if (!player) {
AVAudioPlayer *player = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:&error];
[player play];
} else if (!player.playing) {
[player play];
}
您可以创建共享实例并被所有 viewController 调用。所以可以参考什么时候stop/play/load等
@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: 可能有错别字,凭记忆写的