自动旋转在iOS 7中无法正常工作,在iOS 6中运行良好

时间:2013-11-06 16:39:15

标签: ios iphone ios6 ios7 orientation

我有一个仅在某些部分支持横向的应用程序(照片库,视频等),并且所有功能在iOS 6上运行正常,没有任何问题,但是,在iOS 7中应用程序崩溃。

所以继承我的问题:

  1. 启动应用并使用仅支持肖像的视图控制器加载初始导航控制器
  2. 将视图控制器推送到支持横向和纵向的堆栈
  3. 将视图旋转为横向
  4. pop view controller
  5. app崩溃
  6. -->
    CRASH: **preferredInterfaceOrientationForPresentation must return a supported interface orientation!**
    2013-11-06 10:18:06.220 ausopen-iphone-2014[57605:70b] Stack Trace: (
      0   CoreFoundation                      0x03f665e4 __exceptionPreprocess + 180
      1   libobjc.A.dylib                     0x03ce38b6 objc_exception_throw + 44
      2   CoreFoundation                      0x03f663bb +[NSException raise:format:] + 139
      3   UIKit                               0x01366f1c -[UIViewController _preferredInterfaceOrientationForPresentationInWindow:fromInterfaceOrientation:]
    
         

    + 580

    其他信息:

    在我的info.plist中,我支持肖像和风景

    在我的AppDelegate中,我实现了以下方法:

    - (NSUInteger)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window{}
    

    在这个方法中,我指定如果第一个视图(HomeVC)显示它应该支持所有方向。

    在这个方法中,我还指定如果第二个视图(PhotoVC)显示它也应该支持所有方向。

    在我的第一个视图(HomeVC)中,我使用以下方法覆盖此方法,以便在显示视图时仅支持纵向模式:

    - (BOOL)shouldAutorotate {
        return YES;
    }
    
    - (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation
    {
        return UIInterfaceOrientationPortrait;
    }
    
    - (NSUInteger)supportedInterfaceOrientations
    {
        return UIInterfaceOrientationMaskPortrait;
    } 
    

    不确定iOS 7中有什么变化,因为一切都在iOS 6中运行良好。似乎在iOS 7中,一旦弹出横向视图,应用程序就不会自动旋转。

    任何帮助将不胜感激..

2 个答案:

答案 0 :(得分:14)

在IOS7中。如果你使用UINavigationController,旋转处理方式是不同的!

看看UINavigationController,可以看到它是UIViewController的子类,那就是在他上面列出了上面处理方法的轮换;所以我需要使用UINavigationController也做旋转处理,

我的方法是将类别添加到UINavigationController,这样做。

在类别中。 M写道

-(BOOL)shouldAutorotate {    
  return [[self.viewControllers lastObject] shouldAutorotate];
}

- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation {    
  return [[self.viewControllers lastObject] preferredInterfaceOrientationForPresentation]; 
}

答案 1 :(得分:1)

你可以简单地使用它: -

-(void)rotateCameraView
{
    [[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];
    [[NSNotificationCenter defaultCenter] addObserver: self selector:@selector(deviceOrientationDidChange:) name: UIDeviceOrientationDidChangeNotification object: nil];
}

//Mohit 18 Oct
- (void)deviceOrientationDidChange:(NSNotification *)notification {
    //Obtaining the current device orientation
    UIDeviceOrientation orientation = [[UIDevice currentDevice] orientation];

    //Ignoring specific orientations
    if (orientation == UIDeviceOrientationFaceUp || orientation == UIDeviceOrientationFaceDown || orientation == UIDeviceOrientationUnknown) {
        return;
    }

    if ((UIDeviceOrientationIsPortrait(orientation) ||UIDeviceOrientationIsPortrait(orientation)) ||
    (UIDeviceOrientationIsLandscape(orientation) || UIDeviceOrientationIsLandscape(orientation))) {
        //still saving the current orientation
        currentOrientation = orientation;
    }
    [self performSelector:@selector(orientationChangedMethod) withObject:nil afterDelay:0];
}

//Mohit 18 Oct
    -(void)orientationChangedMethod
    {
        switch (currentOrientation) {

            case UIDeviceOrientationPortrait:
       }
    }


//Note here current orientation is a UIDeviceOrientation currentOrientation; global variable.