如何在ios中旋转一个视图控制器和其他模式(纵向模式)?

时间:2014-07-10 09:38:38

标签: ios iphone objective-c rotation

我有五个视图控制器,在项目目标设备方向中,我启用了纵向,横向左和横向右。现在我想要5个视图控制器中的4个视图控制器保持在纵向模式(不旋转到横向左侧和横向右侧)并且只有一个视图控制器在所有模式下旋转(纵向,横向左侧,横向右侧)。那么怎么能这样做请告诉。

3 个答案:

答案 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

在这种情况下,这是公认的答案,我认为它也适用于此。