两阶段旋转动画已经过时,该应用程序应该使用更平滑的单阶段动画。

13

我正在开发一个iPad应用。当应用程序启动时,我将其显示在向右的横屏模式中。但是一旦应用程序启动,我就会收到此消息:

Two-stage rotation animation is deprecated. This application should use the smoother single-stage animation

我在所有的类中都使用了这种方法。

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
return (interfaceOrientation == UIInterfaceOrientationLandscapeRight);
}

我也在我的plist文件中将支持的接口方向(iPad)设置为了横向右侧。

如何解决这个警告信息?


如果您尝试使用模态UITabBarController(更新:是的,您需要这样做),请参见此处的解决方案:https://dev59.com/sVjUa4cB1Zd3GeqPNQIn。官方解释为什么会发生这种情况,请参见此处:https://dev59.com/pmw15IYBdhLWcg3wZq5r。 - Alexander
@Alexander 我没有以模态方式显示选项卡栏。 - southpark
你的“登录界面”是一个NavigationController吗?所有必须作为“rootViewController”的控制器都不应该被用作“modal”。 - Alexander
@Alexander LoginScreen以模态形式显示在tabbar控制器中。添加到tabbar控制器中的所有其他控制器都位于导航控制器下作为rootViewControllers。登录后,我会解除登录模态以显示tabbars。 - southpark
5个回答

15

阅读这篇答案之后,我意识到我简单地使用了Tab Bar Controller错误: 应该将选项卡栏仅用作根控制器,但我在它之前插入了一个导航控制器。


似乎在iOS8中可以在导航控制器中使用选项卡控制器,但在iOS7中会出现错误。 - supNate

7

如果在你的故事板中以空的标签栏控制器作为根运行应用程序,也会出现此错误消息。我刚开始做一个应用程序,我的UITabBarController还没有视图控制器,但正在呈现登录模态框。


我也有这个问题。谢谢。 - Skrew

1
问题在于您的应用程序正在使用在iOS 5.0中已被弃用的方法之一:
didAnimateFirstHalfOfRotationToInterfaceOrientation:
willAnimateFirstHalfOfRotationToInterfaceOrientation:duration:
willAnimateSecondHalfOfRotationFromInterfaceOrientation:duration:

您需要修改您的视图控制器以覆盖willAnimateRotationToInterfaceOrientation:duration:方法,并且不要覆盖任何“HalfOfRotation”方法。


是的。实际上,这些方法在我的代码中没有出现过。 - southpark
2
自从6.0版本,willAnimateRotationToInterfaceOrientation:duration:方法有时也会触发此问题...有时我有两个项目,只有willAnimateRotationToInterfaceOrientation:duration:方法,一个会出现这个提示,另一个不会,可能是nib文件中的垃圾代码引起的。 - valexa
我第一次在将UINavigationController添加到之前没有的Storyboard后看到了这条消息。我当时的目标是iOS 5.1...但是,一旦我将部署目标更改为iOS 6.0,该消息就消失了。 - brindy
@brindy 我还没有升级到iOS 6.0。一旦完成,我会更新的...谢谢 - southpark
经历了和Brindy一样的问题,目标是在Xcode5上达到7.0 - 但更改部署目标不是一个选项。 - Johan
显示剩余4条评论

0

这个错误消息与TabBarController的使用有关。当您没有将tabBarController作为应用程序的"根控制器"时,可以预期出现此错误。因此,请将您的TabBarController设置为根控制器,这个错误就不会再困扰您了。


0

检查一下你的选项卡栏数组声明,可能犯了以下错误: 我在赋值后声明了数组对象

tabBarController.viewControllers = tabControlArry;
[tabControlArry addObject:navCOntroller];
[tabControlArry addObject:navController1];

正确的方式:

[tabControlArry addObject:navCOntroller];
[tabControlArry addObject:navController1];
tabBarController.viewControllers = tabControlArry;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接