我使用两个 ViewController。一个 MainView 和一个 FlipViewController。MainView 包含一堆按钮和控件,以及一个图形显示,而 FlipView 包含设置。
MainView 根据方向加载不同的 XIB,以方便我支持的各种按钮和图形屏幕。这允许极大的灵活性以不同的方式布置事物。该项目最初是在 StoryBoarding 功能添加到 Xcode 之前创建的。
正常的用例是我在 MainView 上以纵向模式开始,然后触摸一个按钮,将 FlipView 旋转到视图中。我在 FlipView 上进行操作(配置程序的各个方面),然后提交更改,这会将我转回 MainVIew。到目前为止一切都很好。
当我进入 FlipView 然后旋转设备以使 FlipView 采用不同的方向时,就会出现问题。假设我将肖像旋转到横向。然后从 FlipView 返回到 MainView。此时,MainView 并不知道 FlipView 执行的 Rotation。所以它仍然用 Portrait XIB 显示 MainView。
从 FlipViewController 返回后,MainView 的 willRotateToInterfaceOrientation 永远不会被调用。因此,它永远不会发现方向变化,因此,为该方向保留了不正确的 XIB。这是 willRotateToInterfaceOrientation 中的方向处理程序的示例...
-(void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration {
// if portrait, load the portrait XIB for Pad or Phone
if (UIInterfaceOrientationIsPortrait(toInterfaceOrientation)) {
if( UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
[[NSBundle mainBundle] loadNibNamed:@"MainViewiPad" owner:self options:nil];
}else{
[[NSBundle mainBundle] loadNibNamed:@"MainView" owner:self options:nil];
}
[self viewDidLoad];
intorient = 1;
else.... handle Landscape...
所以我一直在尝试 viewWillAppear 例程,试图找到让 MainView 发现旋转并以系统方式执行它的方法。但到目前为止,我不知道如何使系统以这种方式工作。我怀疑当调用 viewWillAppear 时,我必须生成强制重新加载正确方向的代码。但这不能正常工作,因为我似乎从来没有及时加载更改,并且尝试从 viewWillAppear 消息中重新加载新的 XIB 似乎是不正确的。
非常感谢任何有助于理解这种行为的帮助。