如何创建AVPlayer单例类

时间:2013-09-30 04:22:11

标签: ios singleton avplayer

我使用AVPlayer播放来自网址的歌曲,我初步化并在我的viewcontroller中分配它,现在我遇到了问题,当我导航到另一个视图控制器并返回主播放器播放歌曲详情和滑块更新时应该保留,但问题是当我再次导航到主播放器播放细节和滑块更新没有发生但歌曲不断播放。我怎么能避免这种情况,任何人都可以给我一些例子。我需要创建一个单例类吗?如果是这样,如何为AVPlayer

创建单例类

2 个答案:

答案 0 :(得分:7)

解决方案1:您还应该在PlayerViewController的viewWillAppear中更新UI。 Song继续播放,因为您不会退出或取消分配您的PlayerViewController。如果您弹出或关闭PlayerViewController,则此解决方案将无效。

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

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

答案 1 :(得分:0)