当前位置 : 主页 > 手机开发 > ios >

ios – 如何创建AVPlayer单例类

来源:互联网 收集:自由互联 发布时间:2021-06-11
我使用AVPlayer从网址播放歌曲,我初始化并在我的viewcontroller中分配它,现在我有一个问题,当我导航到另一个视图控制器并返回主播放器播放歌曲细节和滑块更新应保留但问题是当我再次导
我使用AVPlayer从网址播放歌曲,我初始化并在我的viewcontroller中分配它,现在我有一个问题,当我导航到另一个视图控制器并返回主播放器播放歌曲细节和滑块更新应保留但问题是当我再次导航到主播放器播放细节和滑块更新没有发生但歌曲不断播放.我怎么能避免这种情况,任何人都可以给我一些例子.我需要创建一个单例类吗?如果是这样,如何为AVPlayer创建单例类? 解决方案1:您还应该在PlayerViewController的viewWillAppear中更新UI. Song继续播放,因为您不会退出或取消分配您的PlayerViewController.如果弹出或关闭PlayerViewController,则此解决方案将无效.

解决方案2:
创建一个包含AVAudioPlayer实例的Singleton类.例如

MediaManager.h

@interface MediaManager : NSObject{

}

+(MediaManager *)sharedInstance;
-(void)playWithURL:(NSURL *)url;
-(float)currentPlaybackTime; 
@end

MediaManager.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
网友评论