我一直在使用iOS 7应用程序,使其兼容ios 8(beta 5)。在此应用程序中,UIViewController
(vc1
)显示另一个UIViewController
(vc2
)。 vc1
支持纵向和横向方向; vc2
仅支持纵向方向。提交vc2
后,会询问vc1
:shouldAutorotateToInterfaceOrientation:
,并返回YES
。
在iOS8(测试版5)willRotateToInterfaceOrientation:
和didRotateFromInterfaceOrientation:
未被调用以及新的iOS 8 API方法viewWillTransitionToSize
。但是,这在iOS7中运行良好。
我知道在iOS 8中已弃用willAnimateRotationToInterfaceOrientation
和didRotateFromInterfaceOrientation
,但即使是iOS 8委托方法也未被调用。每次从vc2
启动时vc1
始终只在纵向模式下屏幕加载,即使我提到支持的界面方向为横向左侧。
任何想法......这是iOS8中的错误吗?
答案 0 :(得分:2)
好吧,我没有找到最好的问题,但是我很快就会在iOS 8.1中使用旋转工作,我会将它们呈现给你。它们刚刚从Apple API Reference中进行了一些编辑。
只需将其放在每个VC中,我只需在需要时编辑代码。例如,我有一个应用程序,它具有纵向初始视图控制器,然后VC更改(segue已完成)到具有不同功能的LandscapeVC。 这是导致在LandscapeView中旋转的纵向视图方法。
bool isShowingLandscapeView = false;
- (void)awakeFromNib
{
isShowingLandscapeView = NO;
[[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(orientationChanged:)
name:UIDeviceOrientationDidChangeNotification
object:nil];
}
- (void)orientationChanged:(NSNotification *)notification
{
UIDeviceOrientation deviceOrientation = [UIDevice currentDevice].orientation;
if (UIDeviceOrientationIsLandscape(deviceOrientation) &&
!isShowingLandscapeView)
{
isShowingLandscapeView = YES;
[self performSegueWithIdentifier:@"toLandscape" sender:self];
}
我希望我理解简单。不要犹豫,改善我的答案,我们这辈子都要学习!