3

AVPlayer用来从 url 播放歌曲,我在我的视图控制器中初始化并分配它,现在我有一个问题,当我导航到另一个视图控制器并返回到主播放器播放歌曲详细信息和滑块更新应该保留但问题是什么时候我再次导航到主播放器播放细节和滑块更新没有发生,但歌曲正在连续播放。我怎样才能避免这种情况,谁能给我一些例子。我需要创建一个单例类吗?如果是这样,如何创建一个单例类AVPlayer

4

1 回答 1

7

解决方案 1: 您还应该在 PlayerViewController 的 viewWillAppear 中更新 UI。歌曲继续播放,因为您不会从 PlayerViewController 中返回或释放您的 PlayerViewController。如果您弹出或关闭 PlayerViewController ,则此解决方案将不起作用。

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

媒体管理器.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
于 2013-09-30T05:37:42.300 回答