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

iOS 8旋转方法弃用-向后兼容性,ios,rotation,ios8,Ios,Rotation,Ios8,在iOS 8中,接口旋转的方法是。这包括: willRotateToInterfaceOrientation:持续时间: DidRotateFromInterface方向: WillAnimateRotationInterfaceOrientation:持续时间: 更换方法包括: willtransitionontraitcollection:带TransitionCoordinator: viewwillTransitionOnSize:带有TransitionCoordinator:

在iOS 8中,接口旋转的方法是。这包括:

  • willRotateToInterfaceOrientation:持续时间:

  • DidRotateFromInterface方向:
  • WillAnimateRotationInterfaceOrientation:持续时间:
更换方法包括:

  • willtransitionontraitcollection:带TransitionCoordinator:
  • viewwillTransitionOnSize:带有TransitionCoordinator:
如果未实现新的旋转方法,并且使用iOS 8 SDK编译项目,则视图控制器将不会收到对不推荐的旋转方法的调用

我关心的是:使用iOS 7 SDK构建的AppStore中已经存在的应用会发生什么?在iOS 8设备上是否仍会调用不推荐的旋转方法?

编辑:

仍然会调用旋转方法,但iOS 8中存在一些更改/问题/错误


另外

iOS 8 SDK中不推荐使用旋转方法。这对使用iOS 7 SDK构建的应用程序没有任何影响,即使在iOS 8中运行,也可能在iOS的几个未来版本中运行


例如,
UIButton
font
属性自iOS 3.0以来一直被弃用,并且在iOS 7.0中仍然可用。

我会检查特定情况是否有100%的可信度,但我不希望出现任何问题。我还建议您观看session
216使用UIKit构建自适应应用程序,以获取更多信息。似乎没有调用折旧方法,因此应更新应用程序,使其在运行iOS 8的设备上正常工作。

当应用程序在iOS 8+设备上运行时,仍会调用您列出的不推荐的旋转方法。如果您支持iOS 7,您可以继续使用它们而不会出现问题。如果您只支持iOS 8+,那么最好使用未弃用的方法

但是,请注意,如果在同一视图控制器中实现新的旋转方法和不推荐的方法,则在iOS 7上运行时,将调用不推荐的方法,而在iOS 8+上,将只调用已替换不推荐的新方法


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

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

  • 将视图添加到windows:

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

- (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];
    }];

}
对我来说,这里我们通过一些计算和跟踪标题大小的plist文件来“手动”旋转(因此,如果我们想更改一些按钮等,我们只更改这个plist,而不是所有单独的xib)。我们所有的旋转代码都在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;
}

他们会很好地工作;它们是用iOS7 SDK构建的,当时这些方法还没有被弃用。但是,如果您使用iOS8 SDK编译项目(当它面世时),您将需要关注这一点并更新您的项目–但是如果不采取进一步的行动,旧的应用程序将很好。实际上,我尝试使用iOS 8 SDK运行应用程序。不推荐使用的方法不会被调用。当应用程序在iOS 8设备上运行时,至少在部署目标设置正确的情况下,会调用提到的旋转方法。@fabb如果调用了这些方法,可能是您设置了不正确的东西,然后,我必须找出为什么在使用iOS 8 SDK编译时,我的一些视图在旋转时不会调整大小。因为对于是否在iOS 8上调用已弃用的方法,似乎存在一些混淆:对我来说,它们是在根视图控制器上调用的,但它们在子视图控制器上的调用不像在iOS 7上那样。你有苹果公司的推荐信吗?@fabb-see。“弃用并不意味着立即从框架或库中删除接口。”以及“弃用的API可能会从未来版本的操作系统中删除”。这就是反对的意思,它可能会从未来版本的操作系统中删除。我想知道是谁在没有给出理由的情况下否决了这一点。答案是正确的。我们已经测试过了。我们的一个应用程序支持iOS 4.3[一个企业应用程序],并且在iOS 8 beta5上可以完美地旋转。只有在应用程序是使用iOS 8 SDK构建的情况下,轮换回调才会导致问题。请勿使用xcode 6构建应用程序,否则轮换将失败。^以上评论就是答案,无论您是否使用xcode 6根据7.1或更低版本编译,您必须同时使用Xcode 5或更改不推荐的方法。尽管具有您上面提到的所有设置,但在iOS 8设备上没有调用didRotateFromInterfaceOrientation。@Leon
didRotateFromInterfaceOrientation
在iOS 8 12A365上被调用,我刚刚用一个全新的项目进行了尝试。非常简单:新建单视图项目,在ViewController中覆盖
didRotateFromInterfaceOrientation
,并添加
NSLog(“旋转”)
。在iPhone和iPad的iOS 7和iOS 8上完成轮换后,会记录该日志。事实上,即使您不将部署目标更改为iOS 7,它也会被调用。显然,还有更多内容,我的NSLog没有显示。可能是因为我的didRotateFromInterfaceOrientation方法位于类别中而不是ViewC中吗
- (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;
}