情景
映客直播之前做了一个游戏录屏的功能,可以进行直播手游,但是对于横屏情况下,用户的输入出现了一些问题。
在不改变设备支持的旋转方向的情况下,我们需要让键盘能够正常的从侧面弹出。
思路
对于视频横屏的解决方式一般都是通过使设备横屏的方式进行的,如果是手动触发横屏的方式,一般可以通过修改transform,并进行重新布局的方式进行。
但是对于侧面弹出键盘这件事,我简单思考之后发现有两个思路,一个是强制设备进入横屏状态,一个是通过手动弹出键盘,并修改键盘的弹出方式以及路径。
第一种方案很快发现是不可行的。因为项目需求是只支持竖屏,不能对设备进行横屏状态的获取,那么如果要设置强行横屏就无法绕过这个门槛。
第二种方案中,经过验证,发现键盘出现了多种诡异的情况,如键盘横屏了,但是还是居中显示等。而且由于对键盘弹出时的多种情况进行监听,发现承载系统键盘的View存在有很多层,无法确认具体哪层负责对View的渲染。所以这个让我一度陷入了困扰中。
解决
在对键盘的监听和处理的过程中,由于对键盘相关的父视图的多种处理都存在问题,我监听了更多的对象变化的特征。终于发现了触发横屏键盘的一种行之有效的方式 — window。
根据我对键盘在正常的横竖屏情况下的适配情况,我发现,键盘所在的window,在横屏状态下与在竖屏状态下的宽高正好是相反的,于是我大胆尝试在键盘弹出时,对键盘所属的window的bounds进行修改,并使用transform的方式,对window中的内容进行旋转。
结果非常好,我成功的触发了键盘的重绘,触发了只有在横屏情况下才能触发的侧面弹出键盘的方式。
下面上代码。
|
|
|
|
本作品采用 署名-非商业性使用-相同方式共享 2.5 中国大陆 (CC BY-NC-SA 2.5)协议
进行许可,欢迎转载,但转载请注明来自SarielTang
,并保持转载后文章内容的完整。本人保留所有版权相关权利。
本文永久链接:http://sarieltang.github.io/2016/11/07/知识点小结/2016-11-07/index/