iOS 6旋转方法未被调用

时间:2012-11-23 13:22:26

标签: rotation ios6

我有以下视图层次结构

  • UIScrollView(水平滚动)
    • UIScrollView(垂直滚动)
      • 的UIViewController

实际上有一个Root ScrollView控制器,它有多个Sub ScrollViews。 (Root ScrollViewController仅滚动水平 - 只有垂直的子滚动)。每个Sub ScrollView都有一个UIViewController。

My Root ScrollView Controller按预期工作,并调用我的旋转方法,如下所示:

- (BOOL)shouldAutorotateToInterfaceOrientation (UIInterfaceOrientation)interfaceOrientation
{
    return YES;
}

- (void) willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration
{
    [self rotateScrollViewToInterfaceOrientation:toInterfaceOrientation];
}

- (void) rotateScrollViewToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
 {
    if (UIInterfaceOrientationIsLandscape(interfaceOrientation))
    {
        // do some rotation logic
    }
}

我在Sub ScrollViews和UIViewControllers中使用了相同的方法,但是它们在旋转时不会被调用。

任何人都知道为什么?

2 个答案:

答案 0 :(得分:2)

不推荐使用shouldAutorotateToInterfaceOrientation方法,自iOS 6起将不再调用该方法。

尝试实现以下方法。

-(BOOL)shouldAutomaticallyForwardAppearanceMethods{   
     // This method is called to determine whether to 
     // automatically forward appearance-related containment
     //  callbacks to child view controllers.
    return YES;

}
-(BOOL)shouldAutomaticallyForwardRotationMethods{
    // This method is called to determine whether to
    // automatically forward rotation-related containment 
    // callbacks to child view controllers.
   return YES;
}

注意:iOS 6中仅支持这些方法。

答案 1 :(得分:1)

从iOS 6.0发行说明:

  

iOS 6中的自动旋转正在发生变化。在iOS 6中,   shouldAutorotateToInterfaceOrientation:UIViewController的方法是   弃用。在它的位置,你应该使用   supportedInterfaceOrientationsForWindow:和shouldAutorotate方法。   更多的责任转移到应用程序和应用程序代表。现在,   iOS容器(如UINavigationController)不咨询他们的   孩子们要确定他们是否应该自行旋转。默认情况下,   app和视图控制器支持的界面方向已设置   用于iPad的成语和UIInterfaceOrientationMaskAll   用于iPhone成语的UIInterfaceOrientationMaskAllButUpsideDown。一个   视图控制器支持的接口方向可以转换   时间 - 甚至应用程序支持的界面方向可以转换   时间。系统询问最顶层的全屏视图控制器   (通常是根视图控制器)用于其支持的接口   设备旋转时或视图控制器时的方向   呈现全屏模态演示风格。此外,   仅当此视图控制器时才检索支持的方向   从shouldAutorotate方法返回YES。系统相交   视图控制器支持的方向,支持应用程序   方向(由Info.plist文件或应用程序确定   委托的应用程序:supportedInterfaceOrientationsForWindow:   方法)确定是否旋转。系统确定是否   通过交叉返回的值来支持方向   app的supportedInterfaceOrientationsForWindow:带有值的方法   由最顶层的supportedInterfaceOrientations方法返回   全屏控制器。 setStatusBarOrientation:animated:方法   完全不被弃用。它现在只适用于   最顶层全屏视图的supportedInterfaceOrientations方法   控制器返回0.这使得调用者负责确保   状态栏方向是一致的。为了兼容性,请查看   仍然实现的控制器   shouldAutorotateToInterfaceOrientation:方法没有得到新的   自转行为。 (换句话说,他们不会回归   使用app,app delegate或Info.plist文件来确定   支持的方向。)相反,   shouldAutorotateToInterfaceOrientation:方法用于合成   将返回的信息   supportedInterfaceOrientations方法。