我有以下视图层次结构
实际上有一个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中使用了相同的方法,但是它们在旋转时不会被调用。
任何人都知道为什么?
答案 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方法。