iOS 以 NavigationController 作为根制作,一个控制器仅景观
iOS with NavigationController As Root Make, One Controller ONLY Landscape
我有一个根控制器是 UINavigationController 的应用程序。按下一个按钮,它就会按下另一个视图控制器。再按一次,它会启动一个带有 Overlay 的 AVCaptureSession。我想要那个视图,那个视图只能是风景,而不是肖像。我看了很多不同的教程,但没有任何效果。
我得到的最接近的是:
NSNumber *value = [NSNumber numberWithInt:UIInterfaceOrientationLandscapeLeft];
[[UIDevice currentDevice] setValue:value forKey:@"orientation"];
在 viewDidAppear 中。但是,存在一些问题。第一,它立即回到肖像。第二,其他视图仍然可以是纵向和横向,我不希望那样。我需要帮助。
在我的应用委托中,我使用了这段代码并确保只选择了纵向模式:
- (UIInterfaceOrientationMask)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window
{
if ([self.window.rootViewController.presentedViewController isKindOfClass:[SecondViewController class]])
{
SecondViewController *secondController = (SecondViewController *) self.window.rootViewController.presentedViewController;
if (secondController.isPresented)
{
return UIInterfaceOrientationMaskLandscape;
}
else return UIInterfaceOrientationMaskPortrait;
}
else return UIInterfaceOrientationMaskPortrait;
}
是的,您可以通过在您的 appDelegate 中放置波纹管方法来将特定的 viewController 作为景观。
-(NSUInteger)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window
{
if(self.restrictRotation)
return UIInterfaceOrientationMaskPortrait;
else
return UIInterfaceOrientationMaskAll;
}
然后在你的 appDelegate
中取一个 bool 属性
@property (nonatomic) BOOL restrictRotation;
然后在您想要更改方向的视图控制器中创建 appDelegate 共享实例并允许像下面的方法那样更改限制
-(void) restrictRotation:(BOOL) restriction
{
AppDelegate* appDelegate = (AppDelegate*)[UIApplication sharedApplication].delegate;
appDelegate.restrictRotation = restriction;
}
现在从您的视图控制器调用此方法并根据需要更改方向。
[self restrictRotation:NO];
NSNumber *value = [NSNumber numberWithInt:UIInterfaceOrientationLandscapeLeft];
[[UIDevice currentDevice] setValue:value forKey:@"orientation"];
最重要的是当您的视图消失时将方向更改为纵向,否则所有其他 viewController 也会变成横向模式。
-(void)viewWillDisappear:(BOOL)animated
{
NSNumber *value = [NSNumber numberWithInt:UIDeviceOrientationPortrait];
[[UIDevice currentDevice] setValue:value forKey:@"orientation"];
[self restrictRotation:YES];
}
希望对您有所帮助。
我有一个根控制器是 UINavigationController 的应用程序。按下一个按钮,它就会按下另一个视图控制器。再按一次,它会启动一个带有 Overlay 的 AVCaptureSession。我想要那个视图,那个视图只能是风景,而不是肖像。我看了很多不同的教程,但没有任何效果。
我得到的最接近的是:
NSNumber *value = [NSNumber numberWithInt:UIInterfaceOrientationLandscapeLeft];
[[UIDevice currentDevice] setValue:value forKey:@"orientation"];
在 viewDidAppear 中。但是,存在一些问题。第一,它立即回到肖像。第二,其他视图仍然可以是纵向和横向,我不希望那样。我需要帮助。
在我的应用委托中,我使用了这段代码并确保只选择了纵向模式:
- (UIInterfaceOrientationMask)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window
{
if ([self.window.rootViewController.presentedViewController isKindOfClass:[SecondViewController class]])
{
SecondViewController *secondController = (SecondViewController *) self.window.rootViewController.presentedViewController;
if (secondController.isPresented)
{
return UIInterfaceOrientationMaskLandscape;
}
else return UIInterfaceOrientationMaskPortrait;
}
else return UIInterfaceOrientationMaskPortrait;
}
是的,您可以通过在您的 appDelegate 中放置波纹管方法来将特定的 viewController 作为景观。
-(NSUInteger)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window
{
if(self.restrictRotation)
return UIInterfaceOrientationMaskPortrait;
else
return UIInterfaceOrientationMaskAll;
}
然后在你的 appDelegate
中取一个 bool 属性@property (nonatomic) BOOL restrictRotation;
然后在您想要更改方向的视图控制器中创建 appDelegate 共享实例并允许像下面的方法那样更改限制
-(void) restrictRotation:(BOOL) restriction
{
AppDelegate* appDelegate = (AppDelegate*)[UIApplication sharedApplication].delegate;
appDelegate.restrictRotation = restriction;
}
现在从您的视图控制器调用此方法并根据需要更改方向。
[self restrictRotation:NO];
NSNumber *value = [NSNumber numberWithInt:UIInterfaceOrientationLandscapeLeft];
[[UIDevice currentDevice] setValue:value forKey:@"orientation"];
最重要的是当您的视图消失时将方向更改为纵向,否则所有其他 viewController 也会变成横向模式。
-(void)viewWillDisappear:(BOOL)animated
{
NSNumber *value = [NSNumber numberWithInt:UIDeviceOrientationPortrait];
[[UIDevice currentDevice] setValue:value forKey:@"orientation"];
[self restrictRotation:YES];
}
希望对您有所帮助。