iOS 8旋转方法弃用 – 向后兼容性

在iOS 8中, 不赞成使用界面旋转的方法。 这包括:

  • willRotateToInterfaceOrientation:duration:
  • didRotateFromInterfaceOrientation:
  • willAnimateRotationToInterfaceOrientation:duration:

replace方法包括:

  • willTransitionToTraitCollection:withTransitionCoordinator:
  • viewWillTransitionToSize:withTransitionCoordinator:

如果未实现新的旋转方法,并且使用iOS 8 SDK编译项目,视图控制器将不会接收调用 – 不build议使用的旋转方法。

我担心的是: 使用iOS 7 SDK构build的AppStore中的应用程序会发生什么? 过时的旋转方法是否仍然在iOS 8设备上被调用?

编辑:

旋转方法仍然被调用,但在iOS 8中存在一些变化/问题/错误。

另外UIScreen现在是面向接口的

旋转方法在​​iOS 8 SDK中已弃用。 这对使用iOS 7 SDK构build的应用程序完全没有任何影响,甚至可以在iOS 8中运行,也可能在iOS的将来版本中运行。

举个例子, UIButtonfont属性自iOS 3.0开始已经被弃用,并且在iOS 7.0中仍然可用。

我刚刚遇到了这个问题,我想使用之前使用的相同方法(至less现在是这样),所以这就是我所做的。

 - (void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator { [super viewWillTransitionToSize:size withTransitionCoordinator:coordinator]; //The device has already rotated, that's why this method is being called. UIInterfaceOrientation toOrientation = [[UIDevice currentDevice] orientation]; //fixes orientation mismatch (between UIDeviceOrientation and UIInterfaceOrientation) if (toOrientation == UIInterfaceOrientationLandscapeRight) toOrientation = UIInterfaceOrientationLandscapeLeft; else if (toOrientation == UIInterfaceOrientationLandscapeLeft) toOrientation = UIInterfaceOrientationLandscapeRight; UIInterfaceOrientation fromOrientation = [[UIApplication sharedApplication] statusBarOrientation]; [self willRotateToInterfaceOrientation:toOrientation duration:0.0]; [coordinator animateAlongsideTransition:^(id<UIViewControllerTransitionCoordinatorContext> context) { [self willAnimateRotationToInterfaceOrientation:toOrientation duration:[context transitionDuration]]; } completion:^(id<UIViewControllerTransitionCoordinatorContext> context) { [self didRotateFromInterfaceOrientation:fromOrientation]; }]; } 

由于我没有持续时间,所以我仍然不确定是否应该在animation块之外使用它。

  [self willRotateToInterfaceOrientation:toOrientation duration:0.0]; 

在iOS 8+设备上运行应用程序时,仍然会调用您列出的不推荐使用的旋转方法。 如果你正在支持iOS 7,你可以继续使用它们,没有问题。 如果您只支持iOS 8+,那么使用非弃用的方法是明智的做法。

但是请注意,如果在同一个视图控制器中实现新的旋转方法和不赞成使用的方法,则在iOS 7上运行时,将会调用不推荐使用的方法,并且在iOS 8+上它将只调用replace这些方法的新方法已弃用。

例如,如果您只实现了willRotateToInterfaceOrientation ,则在iOS 7和8上运行时将调用此方法。如果添加了viewWillTransitionToSize ,则iOS 7仍将调用willRotateToInterfaceOrientation但iOS 8不会,而只调用viewWillTransitionToSize

我会检查一下具体的案例,以确保100%的信心,但是我不希望有任何麻烦。 我还build议您从WWDC 2014中观看会议216 Building Adaptive Apps with UIKit以获取更多信息。 它看起来像折旧的方法不被调用,所以应用程序应该更新,以适应运行iOS 8的设备。

对于我来说,在这里我们用一些计算和一个plist文件来旋转“东西手动”,跟踪标题的大小和类似的东西(所以如果我们想改变button等等,我们只改变这个plist而不是所有单独的xibs) 。 而我们所有的旋转代码是在willLayoutSubviews所以所有的东西都是正确的,即使在新的iOS8 …除了我也看到了新的ios8 [[UIScreen mainScreen] bounds].size.width现在返回宽度根据设备的方向不要设备的实际大小。

我会发布到其他线程:

 - (BOOL) isIOS8OrAbove{ float version802 = 1140.109985; float version8= 1139.100000; // there is no def like NSFoundationVersionNumber_iOS_7_1 for ios 8 yet? NSLog(@"la version actual es [%f]", NSFoundationVersionNumber); if (NSFoundationVersionNumber >= version8){ return true; } return false; } 

旋转方法仍然有效, 还存在其他问题:

  • 与视图添加到窗口: 旋转问题与视图添加到窗口的ios 8