在iOS 8中,界面轮换的方法是deprecated。这包括:
willRotateToInterfaceOrientation:duration:
didRotateFromInterfaceOrientation:
willAnimateRotationToInterfaceOrientation:duration:
替换方法包括:
willTransitionToTraitCollection:withTransitionCoordinator:
viewWillTransitionToSize:withTransitionCoordinator:
如果没有实现新的旋转方法,并且使用iOS 8 SDK编译项目,则视图控制器将不接收调用 - 添加到已弃用的旋转方法。
我担心的是:使用iOS 7 SDK构建的AppStore中的应用程序会发生什么变化?是否仍会在iOS 8设备上调用已弃用的旋转方法?
修改
仍在调用旋转方法,但iOS 8中存在一些更改/问题/错误。
答案 0 :(得分:36)
我刚刚遇到这个问题,我想使用之前使用的相同方法(至少目前为止),所以这就是我所做的。
- (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];
}];
}
我还不确定是否应该在动画块之外使用它,因为我没有持续时间。
[self willRotateToInterfaceOrientation:toOrientation duration:0.0];
答案 1 :(得分:19)
iOS 8 SDK中不推荐使用旋转方法。这对使用iOS 7 SDK构建的应用程序完全没有影响,甚至可以在iOS 8和iOS的未来版本中运行。
例如,自{iOS}起,font
UIButton
属性已被弃用,并且在iOS 7.0中仍然可用。
答案 2 :(得分:6)
当应用程序在iOS 8+设备上运行时,仍会调用您已列出的已弃用的轮播方法。如果您支持iOS 7,则可以继续使用它们而不会出现问题。如果您只支持iOS 8+,那么最好使用不推荐使用的方法。
但是,请注意,如果在同一个视图控制器中实现新的旋转方法和不推荐的旋转方法,则在iOS 7上运行时,将调用不推荐使用的方法,而在iOS 8+上,它只调用新方法已经取代了那些被弃用的。
例如,如果您只实现willRotateToInterfaceOrientation
,则在iOS 7和8上运行时将调用此方法。如果您再添加viewWillTransitionToSize
,iOS 7仍会调用willRotateToInterfaceOrientation
但是iOS 8不会,而只会调用viewWillTransitionToSize
。
答案 3 :(得分:2)
我会检查具体案例是否有100%的信心,但我不指望有任何麻烦。我还建议你从WWDC 2014观看会话216 Building Adaptive Apps with UIKit
以获取更多信息。看起来不会调用折旧方法,因此应该更新应用程序以使其与运行iOS 8的设备一起正常工作。
答案 4 :(得分:1)
轮换方法仍有效,但存在其他问题:
答案 5 :(得分:1)
对我来说,我们在这里手动旋转#34;有一些计算和plist文件跟踪标题和类似的东西的大小(所以如果我们想要更改某些按钮等等,我们只更改此plist而不是所有单独的xib)。我们所有的旋转代码都在willLayoutSubviews
内,所以所有的东西都是正确的,即使在新的iOS8上......除了I我也确实看到新的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;
}