我有五个视图控制器,在项目目标设备方向中,我启用了纵向,横向左和横向右。现在我想要5个视图控制器中的4个视图控制器保持在纵向模式(不旋转到横向左侧和横向右侧)并且只有一个视图控制器在所有模式下旋转(纵向,横向左侧,横向右侧)。那么怎么能这样做请告诉。
答案 0 :(得分:0)
为每个ViewController实现-(NSUInteger)supportedInterfaceOrientations
,并指定每个控制器应支持的接口方向。
修改
假设您为每个ViewController都有单独的实现,请在每个实现中实现-(NSUInteger)supportedInterfaceOrientations
和-(BOOL)shouldAutorotate
。
例如
-(NSUInteger)supportedInterfaceOrientations{
return UIInterfaceOrientationMaskLandscape;
}
将确保您的视图控制器支持所有横向模式。将此与
结合使用-(BOOL)shouldAutorotate{
return YES;
}
,您的显示屏将"翻转"旋转时结束。
使用枚举UIInterfaceOrientationMask
调整支持的方向,并尝试不同的组合以及“{/ 1}}的是/否返回值”,直到获得所需的行为。
答案 1 :(得分:0)
首先,在AppDelegate中,写下这个。
- (NSUInteger)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window
{
return UIInterfaceOrientationMaskAll;
}
Then, For UIViewControllers, in which you need only PORTRAIT mode, write these functions
- (BOOL)shouldAutorotate
{
return YES;
}
- (NSUInteger)supportedInterfaceOrientations
{
return UIInterfaceOrientationMaskPortrait;
}
For UIViewControllers, which require LANDSCAPE too, change masking to All.
- (NSUInteger)supportedInterfaceOrientations
{
return UIInterfaceOrientationMaskAllButUpsideDown;
//OR return UIInterfaceOrientationMaskAll;
}
Now, if you want to do some changes when Orientation changes, then use this function.
- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration
{
}
请注意: -
很大程度上取决于你的UIViewController嵌入哪个控制器。
例如,如果它在UINavigationController中,那么你可能需要将UINavigationController子类化为覆盖这样的方向方法。
子类化UINavigationController(层次结构的顶层视图控制器将控制方向。)确实将其设置为self.window.rootViewController。
- (BOOL)shouldAutorotate
{
return self.topViewController.shouldAutorotate;
}
- (NSUInteger)supportedInterfaceOrientations
{
return self.topViewController.supportedInterfaceOrientations;
}
从iOS 6开始,UINavigationController不会要求其UIVIewControllers提供方向支持。因此我们需要将其子类化。
答案 2 :(得分:0)
我已经回答了这个问题here
在这种情况下,这是公认的答案,我认为它也适用于此。