iPad方向更改问题

在iPad上运行时,我的iPhone应用程序在支持方向更改方面显示出一些奇怪的行为。

应用程序以视图控制器(为了参数调用视图A)和导航控制器启动,并且shouldAutorotateToInterfaceOrientation仅为纵向返回YES。 在导航控制器上,我推动一个视图控制器(视图B),该视图控制器也仅为纵向返回YES。 然后,我将另一个视图控制器(视图C)推到支持所有旋转的导航控制器上,并根据要旋转的方向调整屏幕上的项目。

当它在iPhone模拟器和设备上运行时,如果旋转到视图C上的横向,然后点击后退按钮返回到视图B,则它执行正确的操作并将视图B切换回纵向模式。 (在模拟器中,它甚至可以将模拟器自动旋转回人像。)

我遇到的问题是,当我在iPad模拟器和设备上执行完全相同的事件序列时,出现的视图B不会旋转回肖像,导航控制器仍然显示视图C的信息。然后,我点击后退按钮,视图保持不变,但导航控制器对视图B显示正常(但全部仍处于横向模式)。 然后,如果我再次点击后退按钮,视图A会出现在视图B导航栏项目下方,并最终再次点击回到我的视图A并显示导航栏A项目。

如果我在iPad上查看B并开始旋转,shouldAutorotateToInterfaceOrientation会触发NO,直到我到达肖像模式,然后全部恢复正常。

该应用程序使用最新发布的iPhone SDK构建,并具有以下构建设置:iPhone Simulator 4.0的基本SDK,iPhone的目标设备系列,iPhone OS 3.1.3的iPhone操作系统部署目标。

有任何想法吗?


苹果表示:

案例:您的UITabBarController或UINavigationController中的所有子视图控制器不同意共同的方向集。

响应:为确保所有子视图控制器正确旋转,必须为代表每个选项卡或导航级别的每个视图控制器实现shouldAutorotateToInterfaceOrientation。 每个人都必须就旋转发生的方向达成一致。 也就是说,他们都应该为相同的定位位置返回YES。

http://developer.apple.com/iphone/library/qa/qa2010/qa1688.html

您可以在导航控制器中设置设备方向,而不是在单个视图中。 然后,您可以检查堆栈中的哪个视图,并根据结果进行旋转。 这样,导航控制器也处理所有方向。


以下是我用来防止该错误的一些代码:

- (void)viewDidLoad {  
    if (self.interfaceOrientation == UIInterfaceOrientationPortrait) {
        self.view.transform = CGAffineTransformIdentity;
        self.view.transform = CGAffineTransformMakeRotation(M_PI/2);
        self.view.bounds = CGRectMake(0.0, 0.0, 480, 320);
    }
    [UIView commitAnimations];
}

- (void)viewDidLoad {
    if (self.interfaceOrientation == UIInterfaceOrientationLandscapeRight) {
        self.view.transform = CGAffineTransformIdentity;
        self.view.transform = CGAffineTransformMakeRotation(-(M_PI / 2));
        self.view.bounds = CGRectMake(0, 0, 320, 480);;
    }
    [UIView commitAnimations];
}

根据设备的方向,您需要修改一些代码。

链接地址: http://www.djcxy.com/p/46691.html

上一篇: iPad orientation change issue

下一篇: Is there a way to change the delete action on an existing instance of shared