我使用 AVPlayer 从 urls 播放歌曲,我初始化并在我的 View Controller 中分配它,现在我遇到了问题,当我导航到另一个 View Controller 并返回主播放器播放歌曲详细信息和滑块更新应该保持但问题是当我再次导航到主播放器时,播放详细信息和滑块更新没有发生,但歌曲一直在播放。我如何避免这种情况,任何人都可以向我展示一些例子。我需要创建一个单例类吗?如果是这样,如何为 AVPlayer 创建一个单例类?

最佳答案

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

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

媒体管理器

@interface MediaManager : NSObject{

}

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

媒体管理器
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

关于ios - 如何创建 AVPlayer 单例类,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19086419/

10-13 09:44