我有一个控制器来管理UITextView。通常,在支持多个界面方向的应用程序中,我会简单地重写
现在,在这个特定的应用程序中,我有一个根视图必须永远只能处于纵向模式。这是一个相机预览视图。我还有一个覆盖相机视图的叠加视图,我希望它支持所有的界面方向。这就是UITextView所在的位置。
因此,由于固定方向的根视图,我不能使用内置的旋转:我必须手动完成。这不是问题,我可以注册
这足以使视图正确定位,但键盘仍然只会以纵向方向显示。同样,每次收到设备旋转的通知时,我都可以通过UIApplication的
但这就是问题所在。我希望以下组合:
- 注册旋转通知 - 手动旋转视图 - 设置状态栏方向(带动画)
足以完全复制自动旋转行为。但它在一个重要的方面表现不佳:如果键盘显示在一个方向上,然后旋转到另一个方向,键盘将固执地保持在原来的位置,好像从未调用
补充说明: 为了避免重复劳动,我尝试了以下解决方案:
- 在方向改变时,放弃并立即重新成为第一响应者。这确实会使键盘移动到适当的方向,但它会在没有动画的情况下这样做,并且偶尔会出现非常糟糕的事情,例如在纵向和横向之间显示横向大小的键盘等。 - 在方向改变时只是放弃第一响应者。这也具有奇怪的行为,即立即将键盘移动(但不调整大小)到新方向,然后以动画方式将其关闭。它非常丑陋和令人震惊。
-shouldAutorotateToInterfaceOrientation:
,设置适当的自动调整大小掩码,然后继续我的工作。在继续我的工作时,如果我开始编辑这个UITextField,例如,是在纵向模式下,然后将设备旋转到横向模式,键盘会与视图的其余部分一起漂亮地动画到横向模式。这就是我想要的。现在,在这个特定的应用程序中,我有一个根视图必须永远只能处于纵向模式。这是一个相机预览视图。我还有一个覆盖相机视图的叠加视图,我希望它支持所有的界面方向。这就是UITextView所在的位置。
因此,由于固定方向的根视图,我不能使用内置的旋转:我必须手动完成。这不是问题,我可以注册
UIDeviceOrientationDidChangeNotification
并手动动画叠加视图的适当旋转和框架调整。这足以使视图正确定位,但键盘仍然只会以纵向方向显示。同样,每次收到设备旋转的通知时,我都可以通过UIApplication的
-setStatusBarOrientation:
来纠正这个问题。但这就是问题所在。我希望以下组合:
- 注册旋转通知 - 手动旋转视图 - 设置状态栏方向(带动画)
足以完全复制自动旋转行为。但它在一个重要的方面表现不佳:如果键盘显示在一个方向上,然后旋转到另一个方向,键盘将固执地保持在原来的位置,好像从未调用
-setStatusBarOrientation:
一样。据我所知,唯一影响键盘显示的是应用程序的状态栏方向,而且只有一个方法可以设置它。那么我没戏了吗?真的不可能像自动旋转一样手动使键盘旋转吗?补充说明: 为了避免重复劳动,我尝试了以下解决方案:
- 在方向改变时,放弃并立即重新成为第一响应者。这确实会使键盘移动到适当的方向,但它会在没有动画的情况下这样做,并且偶尔会出现非常糟糕的事情,例如在纵向和横向之间显示横向大小的键盘等。 - 在方向改变时只是放弃第一响应者。这也具有奇怪的行为,即立即将键盘移动(但不调整大小)到新方向,然后以动画方式将其关闭。它非常丑陋和令人震惊。