iOS8:手机旋转到横向时如何显示不同的视图控制器?

时间:2015-02-23 22:42:32

标签: ios uiviewcontroller ios8 rotation uikit

我有一个仅限肖像的视图控制器。当我旋转手机时,我想显示第二个仅限风景的视图控制器。我怎样才能在iOS 8上运行?

在iOS 7下,一切正常:我听UIDeviceOrientationDidChangeNotification,然后在第一个上呈现横向视图控制器。我使用自定义动画控制器复制原生旋转动画。我为transform属性设置了动画以将视图旋转到位,然后调用setStatusBarOrientation:animated:来更新系统。

在iOS8上,视觉效果有效,但旋转后触摸处理在屏幕的右半部分被破坏。事实上,粉红色区域中任何地方收到的任何触摸都会映射到x = 414。因此触摸注册,但分配了不正确的x坐标。

enter image description here

这似乎与here描述的问题相同,其中该人描述仅在纵向窗框边缘周围的小条带上接收触摸。这似乎也与this problem有关。

问题似乎是底层的UIWindow没有被setStatusBarOrientation:animated:的调用旋转。在调试器中查看它,我看到调用此函数会将 UIDevice 边界更改为横向,但UIWindow边界保持纵向。

根据docs

  

窗口的两个主要功能是提供一个区域,用于显示其视图并将事件分发给视图。

所以这种触摸分配功能似乎越来越严重。

有人可以建议一种在iOS 8中运行的方法吗?无论新的大小类和UITraitCollection的东西,我仍然应该能够将旋转变换应用于视图,而不是具有中断触摸处理。对?

或者,是否有更简单的方法将视图控制器呈现为横向而无需手动实现动画?

2 个答案:

答案 0 :(得分:0)

尝试从应用委托代码中移除或注释掉以下行(如果存在):

self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];

您现在不需要它,它会影响iOS8上的旋转。

答案 1 :(得分:0)

我认为这是iOS 8的bug,我发现它已经在ios 8.3中修复了