iOS 8旋转方法弃用-向后兼容性
在iOS 8中,接口旋转的方法是。这包括:iOS 8旋转方法弃用-向后兼容性,ios,rotation,ios8,Ios,Rotation,Ios8,在iOS 8中,接口旋转的方法是。这包括: willRotateToInterfaceOrientation:持续时间: DidRotateFromInterface方向: WillAnimateRotationInterfaceOrientation:持续时间: 更换方法包括: willtransitionontraitcollection:带TransitionCoordinator: viewwillTransitionOnSize:带有TransitionCoordinator:
willRotateToInterfaceOrientation:持续时间:
DidRotateFromInterface方向:
WillAnimateRotationInterfaceOrientation:持续时间:
willtransitionontraitcollection:带TransitionCoordinator:
viewwillTransitionOnSize:带有TransitionCoordinator:
另外iOS 8 SDK中不推荐使用旋转方法。这对使用iOS 7 SDK构建的应用程序没有任何影响,即使在iOS 8中运行,也可能在iOS的几个未来版本中运行
例如,
UIButton
的font
属性自iOS 3.0以来一直被弃用,并且在iOS 7.0中仍然可用。我会检查特定情况是否有100%的可信度,但我不希望出现任何问题。我还建议您观看session216使用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。@LeondidRotateFromInterfaceOrientation
在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;
}