我想制作一个iPhone应用程序,当iPhone处于纵向模式时显示视图,而当iPhone处于横向模式时则显示另一个应用程序。 我知道有很多帖子,但我不明白答案。
第一次,要理解,我使用选项卡式应用程序进行测试,因为我已经有两个视图。当我点击第二个屏幕时,我希望我的iphone处于横向模式。 (在纵向模式下的第一个)。
在Apple网站和stackoverflow上,我看到了以下代码:
- (NSUInteger)supportedInterfaceOrientations
{
return UIInterfaceOrientationMaskPortrait | UIInterfaceOrientationMaskLandscapeLeft;
}
- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation
{
return UIInterfaceOrientationLandscapeLeft;
}
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)orientation
{
if ((orientation == UIInterfaceOrientationPortrait) ||
(orientation == UIInterfaceOrientationLandscapeLeft))
return YES;
return NO;
}
或类似的代码。
在我的主题板中,我使用界面将第二个视图放在横向中。
但是当我运行我的应用程序时,我点击第二个屏幕,iPhone保持纵向模式..
我尝试使用单个视图应用程序执行相同操作,并使用.xib文件创建新文件(landscapeViewController),但我无法获得godd结果!
答案 0 :(得分:1)
首先,在故事板中,创建从纵向视图控制器到景观视图控制器的segue,反之亦然。然后,在纵向视图控制器中,执行以下操作:
- (void)viewWillLayoutSubviews
{
if (UIInterfaceOrientationIsLandscape(self.interfaceOrientation)) {
[self performSegueWithIdentifier:@"SegueToLandscapeViewController" sender:self];
}
}
在横向视图控制器中,执行以下操作:
- (void)viewWillLayoutSubviews
{
if (!UIInterfaceOrientationIsLandscape(self.interfaceOrientation)) {
[self performSegueWithIdentifier:@"SegueToPortraitViewController" sender:self];
}
}
答案 1 :(得分:0)
我成功完成了以下代码:
-(void)orientationDidChanged: (NSNotification *)notification {
UIDeviceOrientation devOrientation = [UIDevice currentDevice].orientation;
if (UIDeviceOrientationIsLandscape(devOrientation)) {
UIStoryboard *main = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
landscapeViewController *landscape = [main instantiateViewControllerWithIdentifier:@"landscape"];
[self presentViewController:landscape animated:YES completion:nil];
}
else if (UIDeviceOrientationIsPortrait(devOrientation)) {
[self dismissViewControllerAnimated:YES completion:nil];
}
}
但是我不能改变View Controller之间的转换,而我可以在简单的View之间转换。
也许是因为我有两个视图控制器链接到同一个视图controller.h ...?