我想更改ViewControllers On Screen方向更改
我只有一个类ViewController和两个StoryboardBased UIViewControllers。
UIDeviceOrientation orientation = [UIDevice currentDevice].orientation;
if (orientation == UIDeviceOrientationPortrait || orientation == UIDeviceOrientationPortraitUpsideDown)
{
[[NSBundle mainBundle] loadNibNamed:@"Portrait" owner:self options:nil];
}
else {
[[NSBundle mainBundle] loadNibNamed:@"Landscape" owner:self options:nil];
}
此代码可用于在方向更改时加载不同的xib。但是如何在方向更改时在Xib文件中加载不同的控制器?
答案 0 :(得分:1)
你可以这样做
- (void)viewDidLoad
{
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(orientationChanged:) name:UIDeviceOrientationDidChangeNotification object:nil];
}
-(void)orientationChanged:(NSNotification *)notification
{
UIInterfaceOrientation toInterfaceOrientation = [[UIApplication sharedApplication] statusBarOrientation];
if (UIInterfaceOrientationIsPortrait(toInterfaceOrientation))
{
[[NSBundle mainBundle] loadNibNamed:@"Portrait" owner:self options:nil];
}
else if (UIInterfaceOrientationIsLandscape(toInterfaceOrientation))
{
[[NSBundle mainBundle] loadNibNamed:@"Landscape" owner:self options:nil];
}
}
希望这会对你有所帮助......
答案 1 :(得分:0)
当您使用此方法时,您不会在xib中加载不同的视图控制器。一个xib代表一个带有子视图的视图。
然而,我会追随另一个方法。我将创建一个视图A(“主机”视图控制器的self.view),它只有两个全屏容器视图,一个用于横向,一个用于纵向。 只需进行两次自动调整,以便它们始终占据整个屏幕。
旋转后,我会相应地隐藏和取消隐藏它们。
但为什么你认为每次旋转需要单独的视图控制器?
答案 2 :(得分:0)
这里最好的方法可能就是使用view controller containment api。你应该做的是有一个包装器视图控制器,它嵌入来自2个视图控制器的两个视图(每个方向一个),并使用iOS API提供的方法respond to orientation change在视图之间切换