我正在使用两个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];
}
答案 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]
。
希望这有帮助。