仅在导航控制器下的特定屏幕上进行iPhone自动旋转

时间:2009-06-17 22:53:06

标签: iphone uinavigationcontroller rotation

这只是我遇到的基本问题的一个例子,所以不要担心这种情况听起来有点无意义;)

假设我有一个主要是UINavigationController的应用,只有两个级别。顶级是一个包含图像文件名列表的表,第二级只有一个UIImageView显示您点击的文件名的图像。

对于像这样的应用程序,有没有人知道一种好方法,允许顶层的表自动旋转,同时保持第二级图像在纵向模式下修复?

到目前为止,我已经能够到达那里了......但是当我在横向模式下点击文件名时,即使第二级视图控制器的shouldAutorotateToInterfaceOrientation仅返回yes,图像也会以错误的方向滑入视图模式。

2 个答案:

答案 0 :(得分:3)

在iPhone OS 2.x中没有很好的方法可以做到这一点,但在3.0中,它们已经大大改进了它。

在2.x中,shouldAutorotateToInterfaceOrientation:委托方法只针对方向的更改,因此您将获得您描述的行为:如果它在另一个视图控制器中旋转,即使新的视图控制器不支持旋转到该方向,它也会通过推送和弹出保持旋转状态。

在3.0中,UINavigationController在每次推送或弹出时轮询shouldAutorotateToInterfaceOrientation:并按照您期望的方式遵循它返回的内容,例如:如果您当前在Landscape Left方向中旋转,并且您推送了一个实例视图控制器仅通过shouldAutorotateToInterfaceOrientation:支持纵向方向,它会自动立即翻转逻辑方向,并在纵向方向上以正确的方式在新视图中滑动。

请注意,这仅适用于链接(因此需要)3.0的应用程序。对于与2.x链接的应用程序,它将模拟旧行为。

答案 1 :(得分:0)

问题在于,如果使用自动旋转,则会旋转整个UI(包括我认为的UIWindow实例)。

此时推送到导航控制器上的任何内容都将以横向方式完成。

因此,当您推送图像视图时,这正是您所获得的。

要使其发挥作用,您必须:

  1. 处理根视图的旋转 手动(使用转换)
  2. 通过-PI / 2取消旋转图像视图 使用转换。
  3. 无论哪种方式,您都必须手动执行转换才能使其生效。

    作为旁注,这可能是糟糕的UI设计。作为一个用户,我希望我向下钻取图像以显示正面。但这不知道你的应用程序的确切背景。