仅在导航控制器下的特定屏幕上进行iPhone自动旋转
-
06-07-2019 - |
题
这只是我遇到的基本问题的一个例子,所以不要担心这种情况听起来有点无意义;)
假设我有一个主要是UINavigationController的应用,只有两个级别。顶层是一个包含图像文件名列表的表,第二层只有一个UIImageView显示您点击的文件名的图像。
对于像这样的应用程序,有没有人知道一种好方法,允许顶层的表自动旋转,同时保持第二级图像在纵向模式下修复?
到目前为止,我已经能够到达那里了......但是当我在横向模式下点击文件名时,即使第二级视图控制器的shouldAutorotateToInterfaceOrientation仅返回yes,图像也会以错误的方向滑入视图模式。
解决方案
问题在于,如果使用自动旋转,则会旋转整个UI(包括我认为的UIWindow实例)。
此时推送到导航控制器上的任何内容都将以横向方式完成。
因此,当您推送图像视图时,这正是您所获得的。
要使其发挥作用,您必须:
- 处理根视图的旋转 手动(使用转换)
- 通过-PI / 2取消旋转图像视图 使用转换。 醇>
无论哪种方式,您都必须手动执行转换才能使其生效。
作为旁注,这可能是糟糕的UI设计。作为一个用户,我希望我向下钻取图像以显示正面。但这不知道你的应用程序的确切背景。
其他提示
在iPhone OS 2.x中没有很好的方法可以做到这一点,但在3.0中,它们已经大大改进了它。
在2.x中, shouldAutorotateToInterfaceOrientation:
委托方法仅用于更改到方向,因此您将获得您描述的行为:如果它已被旋转在另一个视图控制器中,即使新视图控制器不支持旋转到该方向,它也会通过推送和弹出保持旋转。
在3.0中,UINavigationController在每个push或pop上轮询 shouldAutorotateToInterfaceOrientation:
,并按照你期望的方式服从它返回的内容,例如:如果你当前在Landscape Left方向旋转,你推视图控制器的一个实例,仅通过 shouldAutorotateToInterfaceOrientation:
支持纵向方向,它会自动并立即翻转逻辑方向,并在纵向方向上以正确的方式在新视图中滑动。
请注意,这仅适用于链接(因此需要)3.0的应用程序。对于与2.x链接的应用程序,它将模拟旧行为。