0

我有以下视图层次结构

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

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

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

- (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 中使用了相同的方法,但它们不会在旋转时被调用。

任何人都知道为什么?

4

2 回答 2

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 中支持。

于 2012-11-23T13:37:09.557 回答
1

从 iOS 6.0 发行说明:

iOS 6 中的自动旋转正在发生变化。在 iOS 6 中,不推荐使用 UIViewController 的 shouldAutorotateToInterfaceOrientation: 方法。取而代之的是,您应该使用 supportedInterfaceOrientationsForWindow: 和 shouldAutorotate 方法。更多的责任正在转移到应用程序和应用程序委托身上。现在,iOS 容器(例如 UINavigationController)不会咨询它们的子容器来确定它们是否应该自动旋转。默认情况下,应用程序和视图控制器支持的界面方向设置为 iPad 惯用语的 UIInterfaceOrientationMaskAll 和 iPhone 惯用语的 UIInterfaceOrientationMaskAllButUpsideDown 。视图控制器支持的界面方向会随着时间而改变——甚至应用程序支持的界面方向也会随着时间而改变。每当设备旋转或视图控制器以全屏模式呈现样式呈现时,系统都会向最顶层的全屏视图控制器(通常是根视图控制器)询问其支持的界面方向。此外,仅当此视图控制器从其 shouldAutorotate 方法返回 YES 时,才会检索支持的方向。系统将视图控制器支持的方向与应用支持的方向(由 Info.plist 文件或应用委托的 application:supportedInterfaceOrientationsForWindow: 方法确定)相交以确定是否旋转。系统通过与应用程序的 supportedInterfaceOrientationsForWindow 返回的值相交来确定是否支持方向:方法,其值由最顶层全屏控制器的supportedInterfaceOrientations 方法返回。setStatusBarOrientation:animated: 方法并未完全弃用。它现在仅在最顶层全屏视图控制器的 supportedInterfaceOrientations 方法返回 0 时才有效。这使调用者负责确保状态栏方向一致。为了兼容性,仍然实现 shouldAutorotateToInterfaceOrientation: 方法的视图控制器不会获得新的自动旋转行为。(换句话说,他们不会回退到使用应用程序、应用程序委托或 Info.plist 文件来确定支持的方向。)相反,shouldAutorotateToInterfaceOrientation:

于 2012-11-23T13:34:39.773 回答