在两个视图之间切换时,iPad方向会出现问题,反之亦然

时间:2011-03-24 16:20:59

标签: objective-c ipad views orientation transformation

我正在使用两个View Controllers构建一个简单的应用程序,我正在使用iPhone模拟器测试代码,一切似乎都运行正常。当我从纵向旋转到横向或从横向旋转到纵向时,会出现问题。这是应用程序的逻辑,应用程序总是在Portrait中启动,我有一个按钮在第一个视图切换到View1到View2。在View2上,我有另一个按钮可以从View2切换回View1。假设我处于纵向模式,我从View1切换到View2,然后将iPad(在模拟器中)从纵向旋转到横向,当我从View2切换回来时,即返回到View1。 View1屏幕/视图显示在Portrait中,View2屏幕显示在后台,即View2的一部分显示在后台,我猜因为View1最初处于Portrait模式。

问题是..之前有没有人遇到过这个问题,如果有的话,任何代码都可以解决这个问题,其次,如何在代码中识别设备的方向以及视图的方向。

此方法是切换到View 2:

-(IBAction) switchToView2: (id) sender {

SecondViewController *myViewController = [[SecondViewController alloc]        initWithNibName:@"SecondViewController" bundle:nil];

[self.view addSubview: myViewController.view];
[UIView commitAnimations];
}

此方法是切换回View1:

-(IBAction) switchBackToView1:(id) sender {

[self.view removeFromSuperview];
[UIView commitAnimations];

}

3 个答案:

答案 0 :(得分:1)

从你的代码:

[self.view addSubview: myViewController.view];

这让我相信你的2个视图是myViewController.view的子视图。这解释了他们为什么同时出现的原因。为不同的视图设置单独的视图控制器是有意义的。

答案 1 :(得分:0)

首先我想

[UIView commitAnimations];

没有必要:

来自Apple

commitAnimations 标记开始/提交动画块的结尾并安排动画执行。

在Interface Builder中,

第二个是否已将控制器的属性设置为横向?

希望得到这个帮助(抱歉我的英语不好)

答案 2 :(得分:0)

是的,如果您不在代码中进行任何方向更改处理,就会发生这种情况。查看this guide,了解如何设置视图以自动或手动处理方向更改的调整。

或者如果您确实已经处理过,那么可能是因为您添加/删除视图的方式。为了更好地处理,我认为您应该尝试UINavigationController管理视图的方式。即,代替addSubview:removeFromSuperview:,您应该使用pushViewController:animated:popViewController:animated:代替。

是的,正如Yoos所说,上面的代码中不需要[UIView commitAnimations]

希望这有帮助。