iOS8之后只支持竖屏的App中某个界面强制横屏后导致部分区域无响应


强制横屏:

 iOS7中的场景:Reveal软件监控视图层次的结构


iOS8之后只支持竖屏的App中某个界面强制横屏后导致部分区域无响应_第1张图片

 


iOS8.1中该视图结构变成了:


iOS8之后只支持竖屏的App中某个界面强制横屏后导致部分区域无响应_第2张图片


 


参看了UIWindow相关API接口和UIApplication:sharedApplication相关的API接口,iOS8 SDK中并没有新增。


而目前通过[[UIApplication sharedApplication] setStatusOrientation:**];来强转 只会让UIWindow:keyWindow转过来,而UIScreen:mainScreen纹丝不动。(或者反过来说也可以解释上图的现象) 这样就导致了UIWindow上部分点击虽然点击实际上发生在屏幕当中但设备处理时 却判断其超出了屏幕范围的诡异情况。。。





我通过改变UIWindow的frame来对齐UIScreen:mainScreen的Frame,结果是UIWindow上的元素排列非常的混乱。而通过SDK的API接口来强制旋转UIWindow也没有找到。改变UIScreen:mainScreen的Frame似乎也是不可取,因为[[UIApplication sharedApplication] setStatusOrientation:**];这个API接口就是要使得UIScreen:mainScreen呈现现在这个样子的。





此处何解,求大神指导。。。

这是在stackoverflow见到的相关问题,就只搜到这一个,且没有解决方案。。。
http://stackoverflow.com/questions/26357162/how-to-force-view-controller-orientation-in-ios-8

个人正在瞎试验, keywindow在强制横屏的时候,旋转M_PI_2,从Reveal的视图结构可以看到 UIWindow/UIScreen:mainScreen/UITextEffectsWindow 三者合一了,但是三者跟设备的屏幕硬件 形成了一个90度角,尼玛。。。


实际上做到这一步,我的强制横屏的过程是这样的:

首先自定义播放器基于MPMoviePlayerControllerm 比如说定义了一个XHMMoviePlayerController
全局变量:playerWindowBgView:全屏时播放器的superView(黑色)

响应横屏时:
1、将playerWindowBgView加载到keyWindow上。设定frame=window.bounds;设定alpha=0.f;(之后旋转结束的时候显示出来alpha=1.f);
2、将XHMMoviePlayerController的播放界面addSubView到playerWindowBgView上,并重新调整界面控件的位置大小等。(所有的view.alpha设定为0.f)---月黑风高可以肆无忌惮...
3、旋转playerWindowBgView同时调整statusBar的方向。
4、所有的view.alpha=1.f;大功告成!
我这个bug出在第3步的“调整statusBar方向”上,iOS8里面用setStatusOrientation调整了StatusBar方向之后,会变成这个样子。这就是问题所在了。如果横屏时隐藏statusBar并使用[[UIDevice currentDevice] setValue: [NSNumber numberWithInteger: UIInterfaceOrientationLandscapeRight] forKey:@"orientation"];勉强满足需求,但是statusBar不能正常显示。
后来有网友推荐了这篇博文:
http://chun.tips/blog/2014/10/23/xiang-jie-uicoordinatespacehe-uiscreenzai-ios-8shang-de-zuo-biao-wen-ti/
便于理解iOS8的坐标体系相关的东东。
感觉类似我的这种强制全屏在iOS8里面,在概念上已经跟iOS7及其之前的概念完全不同了。 

你可能感兴趣的:(IOS)