在iOS8中没有调用UIViewController设备旋转委托方法

时间:2014-08-28 09:09:22

标签: ios ios8

我一直在使用iOS 7应用程序,使其兼容ios 8(beta 5)。在此应用程序中,UIViewControllervc1)显示另一个UIViewControllervc2)。 vc1支持纵向和横向方向; vc2仅支持纵向方向。提交vc2后,会询问vc1shouldAutorotateToInterfaceOrientation:,并返回YES

在iOS8(测试版5)willRotateToInterfaceOrientation:didRotateFromInterfaceOrientation:未被调用以及新的iOS 8 API方法viewWillTransitionToSize。但是,这在iOS7中运行良好。

我知道在iOS 8中已弃用willAnimateRotationToInterfaceOrientationdidRotateFromInterfaceOrientation,但即使是iOS 8委托方法也未被调用。每次从vc2启动时vc1始终只在纵向模式下屏幕加载,即使我提到支持的界面方向为横向左侧。

任何想法......这是iOS8中的错误吗?

1 个答案:

答案 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];
    }

我希望我理解简单。不要犹豫,改善我的答案,我们这辈子都要学习!