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的将来版本中运行。
举个例子, UIButton
的font
属性自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