强制UIViewController全屏和风景

时间:2014-03-06 22:39:21

标签: ios objective-c rotation fullscreen

如何强制我的一个视图控制器在iOS中全屏显示?我的应用程序处于纵向模式,但我希望其中只有一个视图是横向和全屏。

我尝试了这个solution,其中包括使用以下方法实现CustomUINavigationController,并在我想要旋转的viewcontroller中添加shouldAutorotate方法:

//自定义UINAvigationController

-(NSUInteger)supportedInterfaceOrientations{

     return UIInterfaceOrientationMaskLandscapeRight;

   }
  - (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation{
     return UIInterfaceOrientationLandscapeRight;
   }
 - (BOOL)shouldAutorotate{
      return YES;
   }

// UIViewController我想自动旋转

    - (NSUInteger)supportedInterfaceOrientations
{
    return self.topViewController.supportedInterfaceOrientations;
}

我猜我的问题与视图的herachy有关。如果我的ViewController是我的初始视图控制器但不包含所有视图,则它可以工作。我有一个自定义菜单和占位符(视图),我显示所有其他视图。我想成为横向和全屏的viewcontroller来自于占位符内部的视图,也许这是问题,但我现在不知道如何解决它。

2 个答案:

答案 0 :(得分:0)

因此,当调用viewController呈现为self时,以下方法将调用:

 -(NSUInteger)supportedInterfaceOrientations{

     return UIInterfaceOrientationMaskLandscapeRight;

   }
  - (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation{
     return UIInterfaceOrientationLandscapeRight;
   }
 - (BOOL)shouldAutorotate{
      return YES;
   }

正如你所看到的那样,通过放置它们我强迫UIViewContoller显示LandscapeRight。

重要的不是! :如果你使用UINavigation控制器,你需要创建一些“主”导航控制器子视图,并在那里调用这些方法。

希望这有帮助!

答案 1 :(得分:0)

您可以使用我的LNWindowManager在另一个窗口中以模态方式显示视图控制器。

https://github.com/LeoNatan/LNWindowManager

它向模态视图控制器演示文稿公开了类似的API,但扩展到了Windows:

- (IBAction)displayButtonTapped:(UIButton *)sender
{
    UINavigationController* nvc = [self.storyboard instantiateViewControllerWithIdentifier:@"__presentationNVC"];
    nvc.topViewController.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(dismissWindow:)];

    UIWindow* window = [LNWindowManager templateWindowForName:@"example"];
    window.rootViewController = nvc;

    [[LNWindowManager sharedWindowManager].topWindow presentWindow:window animated:YES completion:nil];
}

- (void)dismissWindow:(UIBarButtonItem*)barButtonItem
{
    [[LNWindowManager sharedWindowManager].topWindow.presentingWindow dismissWindow:[LNWindowManager sharedWindowManager].topWindow animated:YES completion:nil];
}

然后,您可以使用AppDelegate方法确定每个窗口的方向:

– application:supportedInterfaceOrientationsForWindow: