我的iPad应用程序介于两种状态之间,一种使用SplitView,另一种使用TableView。
目前我有一个UIWindow对象,并使用以下代码在视图之间切换
-(void) switchToStateA {
[viewControllerB.view removeFromSuperview];
[window addSubview:viewControllerA.view];
}
-(void) switchToStateB {
[viewControllerA.view removeFromSuperview];
[window viewControllerB.view];
}
除非我更改设备方向,否则一切正常。在改变方向和切换状态之后,在改变期间未激活的状态仍然处于其旧状态的框架中(在显示器的边缘留下黑色区域)。如果我再次更改方向,则将修复新状态。
我尝试过添加
[viewControllerA.view setNeedsLayout];
交换视图后但没有效果。
如何确保后台视图控制器获取方向回调,或者在切换状态时如何调用“刷新”?
答案 0 :(得分:1)
这是我的纯粹推测,但是如果不是从窗口中删除视图控制器的视图,而是将视图设置为隐藏并使用exchangeSubviewAtIndex:withSubviewAtIndex:
来更改用户可以看到哪个视图控制器的视图。我想知道操作系统是否优化不将旋转事件发送到视图没有超级视图的任何视图控制器。
你甚至可以想象动画并将顶视图的alpha淡化为0,而底部视图的alpha在切换位置之前会淡化为1。
答案 1 :(得分:0)
设备方向更改由UIViewControllers处理,而不是由孤立的UIViews处理。解决问题的最简单方法是使控制器的视图成为一个愚蠢的容器,您永远不会从窗口中删除它。容器视图将始终在控制器允许的情况下正确旋转。然后,您只需在容器视图中添加/删除子视图,也可以旋转它们。在将它们添加到容器视图之前,不要忘记设置子视图的框架和自动调整大小。