【问题标题】:How to create AVPlayer singleton class如何创建 AVPlayer 单例类
【发布时间】:2013-09-30 04:22:11
【问题描述】:

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

【问题讨论】:

    标签: ios singleton avplayer


    【解决方案1】:

    解决方案 1: 您还应该在 PlayerViewController 的 viewWillAppear 中更新 UI。歌曲会继续播放,因为您不会从 PlayerViewController 中返回或释放您的 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
    

    【讨论】:

    • 很好的解释对我有很大帮助
    猜你喜欢
    • 2011-05-20
    • 1970-01-01
    • 2020-04-24
    • 1970-01-01
    • 2015-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-18
    相关资源
    最近更新 更多