IPhonesdk定位问题

时间:2011-05-05 07:00:47

标签: iphone ios4 iphone-sdk-3.0

我有两个视图,在第一个视图中我有多个按钮,我希望该视图是横向的,所以我把这个代码:

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
     return (interfaceOrientation == UIInterfaceOrientationLandscapeRight);
}

它的工作正常,因为我的应用程序以横向模式启动。此视图上的按钮将用户推送到第二个视图,我想成为一个纵向模式。所以我把这些代码放在第二个视图中,但它不能按我的意愿工作。

 - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
         return (interfaceOrientation == UIInterfaceOrientationPortrait);
    }

它显示了我在之前视图中的方向。我应该在viewdidload上放一些东西才能使它有效吗?请帮忙。谢谢

2 个答案:

答案 0 :(得分:1)

这有点像黑客,但现在是。在viewController的-(void)viewDidLoad中,您要强制执行以下操作:

UIViewController *viewController = [[UIViewController alloc] init];
[self presentModalViewController:viewController animated:NO];
[self dismissModalViewControllerAnimated:NO];
[viewController release];

这基本上通过呈现控制器(默认情况下仅支持肖像)强制纵向。

答案 1 :(得分:0)

您应该为所有视图控制器使用一个方向。否则你可能会遇到一些问题。例如,在您的情况下,假设用户已切换到第二个视图并已将方向更改为 UIInterfaceOrientationPortrait 。现在他返回到第一个屏幕,所有按钮都在错误的位置!实际上问题是方向不会像你期望的那样改变为 UIInterfaceOrientationLandscapeRight 。这是因为在触发 viewWillAppear 后未调用 shouldAutorotateToInterfaceOrientation 。所以你必须编写一些脏的黑客来强制改变方向。这不是一个好的解决方案。

顺便问一下,你如何改变你的控制器?如果您使用 addSubview ,则根本不会触发第二个控制器的 shouldAutorotateToInterfaceOrientation 。使用addSubview时,您应该自己处理它。