美文网首页
锁屏播放 远程控制 remoteControlReceivedW

锁屏播放 远程控制 remoteControlReceivedW

作者: 林大鹏 | 来源:发表于2017-08-21 11:45 被阅读137次

一. 问题

我们的项目需求是这样的:

  • 课程有语音和视频两种类型,当前点播的课程,退出点播界面之后,也可以全局播放,下次再次进入点播界面,如果是同一个课程,定位到上次播放的地方,接着播放,如果不是同一课程,重新播放。
  • 课程种类有系列课和单品课程,系列课程可以上一首和下一首,当前课程播放完毕之后,自动播放下一首。
  • 语音课程进入后台,可以锁屏操作,视频课程进入后台,暂停播放,回到前台继续播放。

就类似音乐播放器。

锁屏播放器.gif

我选用单例做了个全局的播放器。当点播如果是视频课程,在点播界面将播放器添加到点播界面的view,退出点播界面将播放器移除。

我将锁屏后,后台操作的远程控制事件,放在了播放器的view里面进行判断。
但是外部事件的函数确一直没有相应。

//重写父类方法,接受外部事件的处理
- (void)remoteControlReceivedWithEvent: (UIEvent *)receivedEvent 

三. 分析 与 解决

原因:

虽然videoPlayerView(播放器)成为了第一响应者,但是由于videoPlayerView没有被添加到相应的父类中,隐藏响应链无法传递,导致了接收外部事件的函数没有响应。

解决方法:
因此在单例里,我在videoPlayerView加载的时候将其添加到[UIApplication sharedApplication].keyWindow上面。这样外部相应函数就会响应。

原因:
但由于视频点播界面时,需要将videoPlayerView,从父view 移除,添加到当前viewControllerview上面,当退出播放器时,再将videoPlayerView从再viewControllerview移除,重新添加到[UIApplication sharedApplication].keyWindow上。这样也会导致外部相应函数不响应,造成这种问题的原因有可能是响应链被打乱了。

解决方法:
在语音的点播界面的viewDidLoad函数里面,将videoPlayerView重新添加到[UIApplication sharedApplication].keyWindow就可以。

之所以在viewDidLoad函数里面重新添加到[UIApplication sharedApplication].keyWindow就可以使得外部响应函数能够响应,估计是在viewDidLoad这个函数里面或是之后,重新梳理了响应链条。

相关文章

网友评论

      本文标题:锁屏播放 远程控制 remoteControlReceivedW

      本文链接:https://www.haomeiwen.com/subject/uqvarxtx.html