App Deployment Info 纵向锁定时如何手动设置设备方向?
How to manually set the device orientation when App Deployment Info portrait is locked?
我不希望我的应用程序是横向的并且总是 porttrait.So 我让我的应用程序 部署信息 只设置纵向。但是当我需要在我的应用程序中显示任何图像或视频时,我需要横向模式才能更好地显示。
我可以通过
检测设备方向变化
[[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];
[[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(orientationChanged:)
name:UIDeviceOrientationDidChangeNotification
object:[UIDevice currentDevice]];
- (void) orientationChanged:(NSNotification *)note
{
UIDevice * device = note.object;
switch(device.orientation)
{
case UIDeviceOrientationPortrait:
/* */
break;
case UIDeviceOrientationPortraitUpsideDown:
/* */
break;
case UIDeviceOrientationLandscapeLeft:
/* */
break;
case UIDeviceOrientationLandscapeRight:
/* */
break;
default:
break;
};
}
但是,即使应用部署信息纵向已锁定,我如何手动更改我的设备方向?
这个没有用
NSNumber *value=[NSNumber numberWithInt: UIDeviceOrientationLandscapeLeft];
[[UIDevice currentDevice] setValue:value forKey:@"orientation"];
两步:
- 在部署中包含景观
在每个视图控制器中 viewDidLoad
你需要包括:
//Swift
let value = UIInterfaceOrientation.LandscapeLeft.rawValue
UIDevice.currentDevice().setValue(value, forKey: "orientation")
//Obj-C
NSNumber *value = [NSNumber numberWithInt:UIInterfaceOrientationLandscapeLeft];
[[UIDevice currentDevice] setValue:value forKey:@"orientation"];
另请参阅:How do I programmatically set device orientation in iOS7?
与其强制更改方向,不如将横向导航控制器子类化并通过呈现来使用它。然后您的应用程序将始终如您所愿地纵向显示。当你使用这个导航控制器时它会横向。
#import "RotationAwareNavigationController.h"
@implementation RotationAwareNavigationController
-(BOOL)shouldAutorotate {
return NO;
}
- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation
{
return UIInterfaceOrientationLandscapeRight;
}
- (NSUInteger)supportedInterfaceOrientations {
return UIInterfaceOrientationMaskLandscape;
}
你应该像下面这样称呼它;
RotationAwareNavigationController *navController = [[RotationAwareNavigationController alloc] initWithRootViewController:aViewController];
[self presentViewController:navController animated:NO completion:nil];
请在您的项目设置中启用纵向和横向。然后对所有 viewcontroller 使用下面的方法来关闭自转 -
- (BOOL)shouldAutorotate {
return NO;
}
然后对 LandScapeViewControler 以外的所有方法使用以下方法 -
- (void)viewWillAppear:(BOOL)animated {
[[UIDevice currentDevice] setValue:
[NSNumber numberWithInteger: UIInterfaceOrientationPortrait]
forKey:@"orientation"];
}
对 LandScapeViewControler 使用以下方法 -
- (void)viewWillAppear:(BOOL)animated {
[[UIDevice currentDevice] setValue:
[NSNumber numberWithInteger: UIInterfaceOrientationLandscapeLeft]
forKey:@"orientation"];
}
如果您正在使用 NavigationController 和 TabBarController,请使用类别关闭自动旋转。
希望对您有所帮助。
Swift 3+ 的更新答案:
let value = UIInterfaceOrientation.landscapeLeft.rawValue
UIDevice.current.setValue(value, forKey: "orientation")
我不希望我的应用程序是横向的并且总是 porttrait.So 我让我的应用程序 部署信息 只设置纵向。但是当我需要在我的应用程序中显示任何图像或视频时,我需要横向模式才能更好地显示。
我可以通过
检测设备方向变化[[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];
[[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(orientationChanged:)
name:UIDeviceOrientationDidChangeNotification
object:[UIDevice currentDevice]];
- (void) orientationChanged:(NSNotification *)note
{
UIDevice * device = note.object;
switch(device.orientation)
{
case UIDeviceOrientationPortrait:
/* */
break;
case UIDeviceOrientationPortraitUpsideDown:
/* */
break;
case UIDeviceOrientationLandscapeLeft:
/* */
break;
case UIDeviceOrientationLandscapeRight:
/* */
break;
default:
break;
};
}
但是,即使应用部署信息纵向已锁定,我如何手动更改我的设备方向?
这个没有用
NSNumber *value=[NSNumber numberWithInt: UIDeviceOrientationLandscapeLeft];
[[UIDevice currentDevice] setValue:value forKey:@"orientation"];
两步:
- 在部署中包含景观
在每个视图控制器中
viewDidLoad
你需要包括://Swift let value = UIInterfaceOrientation.LandscapeLeft.rawValue UIDevice.currentDevice().setValue(value, forKey: "orientation") //Obj-C NSNumber *value = [NSNumber numberWithInt:UIInterfaceOrientationLandscapeLeft]; [[UIDevice currentDevice] setValue:value forKey:@"orientation"];
另请参阅:How do I programmatically set device orientation in iOS7?
与其强制更改方向,不如将横向导航控制器子类化并通过呈现来使用它。然后您的应用程序将始终如您所愿地纵向显示。当你使用这个导航控制器时它会横向。
#import "RotationAwareNavigationController.h"
@implementation RotationAwareNavigationController
-(BOOL)shouldAutorotate {
return NO;
}
- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation
{
return UIInterfaceOrientationLandscapeRight;
}
- (NSUInteger)supportedInterfaceOrientations {
return UIInterfaceOrientationMaskLandscape;
}
你应该像下面这样称呼它;
RotationAwareNavigationController *navController = [[RotationAwareNavigationController alloc] initWithRootViewController:aViewController];
[self presentViewController:navController animated:NO completion:nil];
请在您的项目设置中启用纵向和横向。然后对所有 viewcontroller 使用下面的方法来关闭自转 -
- (BOOL)shouldAutorotate {
return NO;
}
然后对 LandScapeViewControler 以外的所有方法使用以下方法 -
- (void)viewWillAppear:(BOOL)animated {
[[UIDevice currentDevice] setValue:
[NSNumber numberWithInteger: UIInterfaceOrientationPortrait]
forKey:@"orientation"];
}
对 LandScapeViewControler 使用以下方法 -
- (void)viewWillAppear:(BOOL)animated {
[[UIDevice currentDevice] setValue:
[NSNumber numberWithInteger: UIInterfaceOrientationLandscapeLeft]
forKey:@"orientation"];
}
如果您正在使用 NavigationController 和 TabBarController,请使用类别关闭自动旋转。
希望对您有所帮助。
Swift 3+ 的更新答案:
let value = UIInterfaceOrientation.landscapeLeft.rawValue
UIDevice.current.setValue(value, forKey: "orientation")