您的位置:首页 > 移动开发 > IOS开发

iOS8.1- iOS8.3横屏后部分区域无响应 坐标错乱

2017-07-07 16:51 851 查看

http://www.cocoachina.com/bbs/read.php?tid-244119-page-1.html


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

强制横屏:

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



 

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



 

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

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

iOS8
[[UIApplication sharedApplication] setStatusOrientation: **] rotation bug 



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

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

用了[[UIDevice
currentDevice] setValue: [NSNumber numberWithInteger: UIInterfaceOrientationLandscapeRight] forKey:@"orientation"];之后 问题来了。状态栏没有横过来,卧槽,如果叠加使用[[UIApplication sharedApplication] setStatusOrientation: **];问题又回到原点去了。只好将状态栏在全屏的时候隐藏,要不然自己造一个状态条放上去,顿时蛋很疼啊。iOS8 这里是不是SDK一个显而易见的bug还是怎么滴,感觉不合理啊
UIScreen:mainScreen 和UIWindow:keyWindow通过API接口调用来转屏居然会分道扬镳,这绝对不合理吧 Apple大神!

强制旋转的时候
弃用[[UIApplication sharedApplication] setStatusOrientation: **];使用 [[UIDevice currentDevice] setValue: [NSNumber numberWithInteger: UIInterfaceOrientationLandscapeRight] forKey:@"orientation"]; 就可以三位一体 来旋转啦.但是此方法会导致顶部状态条没有切换,不完美,后期完美的解决方案请看后面的专题文章。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: