0

我有一个 iPad 应用程序,它在两种状态之间切换,一种使用 SplitView,另一种使用 TableView。

目前我有一个 UIWindow 对象,并使用以下代码在视图之间切换

-(void) switchToStateA {
[viewControllerB.view removeFromSuperview];
[window addSubview:viewControllerA.view];
}
-(void) switchToStateB {
[viewControllerA.view removeFromSuperview];
[window viewControllerB.view];
}

除非我更改设备方向,否则一切正常。在改变方向和切换状态后,在改变期间未激活的状态仍处于其旧状态的框架中(在显示边缘留下黑色区域)。如果我再次改变方向,新状态将被修复。

我试过添加

[viewControllerA.view setNeedsLayout];

交换意见后,但没有效果。

如何确保后台视图控制器获得方向回调,或者如何在切换状态时调用“刷新”?

4

2 回答 2

1

这纯粹是我的猜测,但是如果不是从窗口中删除视图控制器的视图,而是将视图设置为隐藏并用于exchangeSubviewAtIndex:withSubviewAtIndex:更改哪个视图控制器的视图对用户可见,该怎么办。我想知道操作系统是否正在优化不向视图没有超级视图的任何视图控制器发送旋转事件。

您甚至可以花哨的动画将顶视图的 alpha 淡化为 0,而底部视图的 alpha 在它们切换位置之前淡化为 1。

于 2010-10-07T04:11:32.477 回答
0

设备方向更改由 UIViewControllers 处理,而不是由孤立的 UIViews 处理。解决您的问题的最简单方法是使控制器的视图成为一个哑容器,您永远不会从窗口中删除它。在控制器允许的情况下,容器视图将始终正确旋转。然后,您只需在容器视图中添加/删除子视图即可使它们也旋转。在将子视图添加到容器视图之前,不要忘记设置子视图的框架和自动调整大小的掩码。

于 2010-10-07T05:10:46.947 回答