锁屏播放 远程控制 remoteControlReceivedW

2017-08-21  本文已影响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这个函数里面或是之后,重新梳理了响应链条。

上一篇 下一篇

猜你喜欢

热点阅读