如何强制视图在iOS中输入横向?

时间:2017-02-27 15:43:33

标签: ios objective-c

我在SO上看到了十几个可能的相关问题,但似乎没有人重复:

how to force view to rotate to landscape in viewdidload?

force landscape ios 7

IOS - How to force the view to landscape

Force landscape for one view controller ios

iOS - Force Landscape Orientation

How to make app fully working correctly for autorotation in iOS 6?

我的应用是基于标签的应用。

目前,在输入某些视图时,我可以将手机旋转到横向,让我的视图进入横向。

主要代码:

CGPath

在我希望成为风景画的视图中,我将// In app delegate - (UIInterfaceOrientationMask)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window { if (_allowRotation == YES) { return UIInterfaceOrientationMaskLandscape; } else { return UIInterfaceOrientationMaskPortrait; } } 设置为YES。

我想强制观看视频

换句话说,进入某些视图时,会自动进入横向,无需旋转手机。甚至用户也将屏幕锁定为肖像。如何实现这一目标?

我正在使用iOS 10。

4 个答案:

答案 0 :(得分:2)

您必须覆盖要将其移动到横向的特定视图的onDidLoad或onDidAppear,例如我将其添加到viewWillAppear并消失:

- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:YES];
    self.navigationController.navigationBarHidden = NO;
    NSNumber *value = [NSNumber numberWithInt:UIInterfaceOrientationLandscapeRight];
    [[UIDevice currentDevice] setValue:value forKey:@"orientation"];
}

-(void)viewWillDisappear:(BOOL)animated {
    NSNumber *value = [NSNumber numberWithInt:UIInterfaceOrientationPortrait];
    [[UIDevice currentDevice] setValue:value forKey:@"orientation"];
    [super viewWillDisappear:animated];
}

所以我们视图显示应用程序移动到横向,当移动消失时,它再次变为纵向。对于appDelegate,你必须添加:

- (UIInterfaceOrientationMask)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window
{
    UINavigationController *navigationController = (UINavigationController *)self.window.rootViewController;
    if ([navigationController.viewControllers.lastObject isKindOfClass:[OpencvViewController class]])
    {
        return UIInterfaceOrientationMaskLandscape;
    }
    else
        return UIInterfaceOrientationMaskPortrait;
}

答案 1 :(得分:0)

需要旋转方向时调用[UIViewController attemptRotationToDeviceOrientation]

您的代码将是这样的:

appDelegate.allowRotation = YES;
[UIViewController attemptRotationToDeviceOrientation];

答案 2 :(得分:0)

您需要使用

- (UIInterfaceOrientationMask)supportedInterfaceOrientations {
    return UIInterfaceOrientationMaskLandscape;
}

用于window.rootViewController层次结构中的容器视图控制器,或者将视图控制器显示在另一个层次结构中。

这会强制您使控制器以横向显示。

最简单的例子是将rootViewController分配给主窗口。 如果您在视图控制器中使用UIInterfaceOrientationMaskLandscape,它从一开始就会以横向显示。

如果您尝试将控制器打包到导航控制器中,则需要对后者进行子类化以在其中定义UIInterfaceOrientationMaskLandscape,因为它是您自己的视图控制器的容器。

同样适用于具有parent-child链接的其他容器(例如tabBarController或您自己的容器)。

在呈现视图控制器时,您还有另一种方法来修复方向:

- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation

答案 3 :(得分:0)

在特定视图控制器中使用以下代码,以便将其旋转到横向模式。

-(void)viewDidLayoutSubviews
{
  NSNumber *value = [NSNumber numberWithInt:UIInterfaceOrientationLandscapeLeft];

  [[UIDevice currentDevice] setValue:value forKey:@"orientation"];
 }