3

我正在构建一个应用程序,该应用程序仅适用于主要视图(正常和倒置)。我已经在项目设置/Plist 中设置了这个设置,一切正常。但是,我有一些模态视图可以执行诸如显示图像/视频之类的操作,并且我希望它们能够旋转到所有方向。

我尝试为 UINavigationController 添加一个类别,但没有运气。我还向调用模式的 viewController 添加了以下代码:

-(BOOL)shouldAutomaticallyForwardAppearanceMethods{
    return NO;
}
-(BOOL)shouldAutomaticallyForwardRotationMethods{
    return NO;
}

我已将以下代码添加到要允许所有方向的模态视图控制器中:

- (BOOL)shouldAutorotate {
    return YES;
}

- (NSUInteger)supportedInterfaceOrientations {
    return UIInterfaceOrientationMaskAll;
}

我错过了什么?有什么建议么?

4

2 回答 2

3

在 iOS 6 上,旋转处理发生了变化。对于您描述的问题,有几种方法。首先,在 plist 中,启用除纵向倒置之外的所有方向。

然后您可以使用以下解决方案之一:

  1. 使用 UINavigationController 的子类,它只允许旋转到纵向。
  2. 对于所有控制器,指定它们支持的旋转。
  3. 您可以覆盖应用程序委托中的方法。由于每当方向更改或推送新的视图控制器时都会在您的委托上调用该方法,因此您可以使用它来临时启用/禁用应用程序的横向显示:

    // In AppDelegate.h:
    @property (nonatomic) BOOL portraitOnly;
    
    // In AppDelegate.m:
    - (NSUInteger)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window
    {
        return _portraitOnly ? UIInterfaceOrientationMaskPortrait : UIInterfaceOrientationMaskAllButUpsideDown;
    }
    
    // to switch to portrait only:
    ((AppDelegate *)[UIApplication sharedApplication].delegate).portraitOnly = YES;
    
    // to switch to allowing landscape orientations:
    ((AppDelegate *)[UIApplication sharedApplication].delegate).portraitOnly = NO;
    
于 2013-04-25T10:44:07.780 回答
1

您需要在构建设置中为作为层次结构中祖先的 viewController 启用旋转(以允许层次结构中较低层的 VC 能够根据需要进行旋转)。然后从每个 viewController 中shouldAutoRotate返回正确的逻辑。supportedInterfaceOrientationswillAnimateRotationToInterfaceOrientation

shouldAutoRotate- 对于根本不移动的视图控制器返回NO 。

- 同样,从返回 YESshouldAutoRotate并返回在该 VC 中有效的方向supportedInterfaceOrientations

- 用于在新方向出现willAnimateRotationToInterfaceOrientation之前进行任何最后一分钟的清理或数据更改。

如果您仍有问题,请随时告诉我。希望能帮助到你!

于 2013-02-20T20:47:13.883 回答