当iPhone处于横向时,以横向模式打开屏幕

时间:2014-05-13 22:43:29

标签: iphone objective-c landscape

我想制作一个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结果!

2 个答案:

答案 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 ...?