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