我在用着AVPlayer
要从网址播放歌曲,我在视图控制器中初始化并分配它,现在我遇到了问题,当我导航到另一个视图控制器并返回主播放器时,播放歌曲详细信息和滑块更新应该保留,但问题是当我导航时再次到主播放器播放详细信息和滑块更新没有发生,但歌曲正在连续播放。我如何才能避免这种情况,任何人都可以给我举一些例子。我需要创建一个单例类吗?如果是这样,如何创建一个单例类AVPlayer
?
解决方案一:您还应该在 PlayerViewController 的 viewWillAppear 中更新 UI。歌曲会继续播放,因为您不会从 PlayerViewController 返回或取消分配。如果您弹出或关闭 PlayerViewController ,则此解决方案将不起作用。
解决方案2:创建一个 Singleton 类,其中包含 AVAudioPlayer 实例。例如
媒体管理器.h
@interface MediaManager : NSObject{
}
+(MediaManager *)sharedInstance;
-(void)playWithURL:(NSURL *)url;
-(float)currentPlaybackTime;
@end
媒体管理器.m
static MediaManager *sharedInstance = nil;
@interface MediaManager (){
AVAudioPlayer *audioPlayer;
}
@end
@implementation MediaManager
-(id)init{
if(self = [super init]){
}
return self;
}
+(MediaManager *)sharedInstance{
//create an instance if not already else return
if(!sharedInstance){
sharedInstance = [[[self class] alloc] init];
}
return sharedInstance;
}
-(void)playWithURL:(NSURL *)url{
NSError *error = nil;
audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:&error];
if(error == nil){
[audioPlayer play];
}
}
-(float)currentPlaybackTime{
return audioPlayer.currentTime;
}
@end
在其中添加其他必要的方法,例如“stopPlayer”等。
示例方法调用
[[MediaManager sharedInstance] playWithURL:url];
float currentTime = [[MediaManager sharedInstance] currentPlaybackTime];
// Update slider
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)