iOS加载新的故事板

简单的iOS应用程序与故事板 – StoryboardA

当iPad改变方向 – 我想加载一个新的故事板 – StoryboardB

我在哪里把这个逻辑。

这是一个很好的做法,当景观(和它的导航)的用户界面不同于肖像。

旋转屏幕时的最佳做法是重新播放视图。 这是自动调整(弹簧和支柱)已经出现一段时间的全部原因,以及新的自动布局function。 你应该可以在旋转时根据需要使用它来重新组织你的视图,最后你应该看到一个平滑的旋转。 不愿意在旋转的时候销毁和重新创build像UI元素这样的资源,这与Android世界中的实际上是首选和默认方法不同。

一般来说,如果UI在纵向和横向上实际上有所不同,它们仍然有很多共同之处,所以可能会有一个额外的部分出现在横向上,例如,纵向隐藏。 我build议不要在旋转时彻底改变你的UI,因为这绝对不是常态,会给用户带来麻烦。 旋转时,您可以轻松地隐藏或显示其他部分。

如果你必须在旋转的时候重新创build你的视图,而不是重新排列它们,那么你至less可以把它们放在同一个故事板上。 没有必要为此使用全新的故事板。

至于你在哪里放置你的逻辑来处理这个问题,如果你决定采用这种方法,这将取决于轮换后究竟需要改变什么。 如果每个视图控制器都需要被重新创build,你可能有逻辑来处理你的应用程序委托。 但是,如果它只是特定的视图控制器,则可能会将这些逻辑仅用于检测和处理这些特定控制器中的情况。

正如我所说的,我非常不鼓励这种方法,我认为使用已有的机制来轮换你的观点会好得多。

您可以通过以下方式注册UIDeviceOrientationDidChangeNotification

[[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(orientationChanged:) name:UIDeviceOrientationDidChangeNotification object:nil]; 

并在收到上面提到的UIDeviceOrientationDidChangeNotification的通知后,您的orientationChanged:方法将被触发,您可以在其中实现您想要实现的任何布局更改,如下所示: –

在您的私人界面isShowingLandscapeView中创build一个BOOL标志,以跟踪当前设备所处的方向,并据此采取行动

 BOOL isShowingLandscapeView = NO; - (void)orientationChanged:(NSNotification *)notification { UIDeviceOrientation deviceOrientation = [UIDevice currentDevice].orientation; if (UIDeviceOrientationIsLandscape(deviceOrientation) && !isShowingLandscapeView) { // Changes pertaining to lanscape orientation here isShowingLandscapeView = YES; } else if (UIDeviceOrientationIsPortrait(deviceOrientation) && isShowingLandscapeView) { // Changes pertaining to portrait orientation here isShowingLandscapeView = NO; } } 

您可以通过以下方式加载其他故事板。

 UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"your storyboard" bundle:nil]; UIViewController *initialViewController = [storyboard instantiateInitialViewController]; [[self navigationController] pushViewController:initialViewController animated:YES];