我在SO上看到了十几个可能的相关问题,但似乎没有人重复:
how to force view to rotate to landscape in viewdidload?
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。
答案 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"];
}