多个UIWindows以及哪个控制状态栏方向

时间:2013-11-12 01:16:36

标签: ios iphone objective-c

如果您有一个UIWindow的应用,我的理解是rootViewController的{​​{1}}将是UIWindow接收旋转/定位方法,例如{ {1}},UIViewController

我正在编写一个外部库,并且有一个实例,我创建另一个shouldAutoRotate对象,设置其shouldAutoRotateToInterfaceOrientation,并使其键和可见。看起来原始窗口的UIWindow仍然是发送旋转方法而不是新方法的窗口。

我希望能够在新窗口可见时控制应用程序是否可以旋转,但似乎原始窗口的rootViewController仍然可以控制它。我尝试将原始窗口的rootViewController设置为rootViewController,禁止在我的新窗口可见时旋转屏幕,并将原始窗口的rootViewController重置为其原始rootViewController但这会导致一些问题。

是否有人知道如何让某个rootViewController负责应用轮播?

2 个答案:

答案 0 :(得分:0)

你是如何呈现新的viewController的?根据文档,被问及supportedInterfaceOrientations的唯一viewControllers是根视图控制器,或填充屏幕的视图控制器。因此,在iPhone上,如果新的viewController正在填充屏幕(例如,以模态方式呈现),则应该接收supportedInterfaceOrientations调用。

自iOS 6起,

shouldAutoRotateToInterfaceOrientation已被弃用,因此您应该覆盖supportedInterfaceOrientations

答案 1 :(得分:0)

这对我有用......

在我的情况下,目标视图显示正确,但状态栏和UIKeyboard保持横向配置,使得真正的混乱。

解决有关statusBarOrientation和参考文献的数千条建议后阅读...... https://developer.apple.com/library/ios/#releasenotes/General/RN-iOSSDK-6_0/_index.html

“setStatusBarOrientation:animated:方法不会被直接弃用。现在只有在最顶层的全屏视图控制器的supportedInterfaceOrientations方法返回0时,它才有效。这使得调用者负责确保状态栏方向一致。“

statusBarOrientation仅在supportedInterfaceOrientations返回0时有效,所以...给我们一个猜测。

如果statusBarOrientation不符合预期,则会返回一个零返回(如果始终返回0,则视图不会旋转,所以:

// if deviceOrientation is A (so I expect statusbarOrientation A
// but statusbarOrientation is B
// return 0
// otherwise 
// return user interface orientation for A

- (NSUInteger)supportedInterfaceOrientations {
    UIDeviceOrientation deviceOrientation = [[UIDevice currentDevice] orientation];
    UIInterfaceOrientation statusBarOrientation =[UIApplication sharedApplication].statusBarOrientation;
    if(deviceOrientation == UIDeviceOrientationPortrait || deviceOrientation == UIDeviceOrientationPortraitUpsideDown){
        if(statusBarOrientation != UIInterfaceOrientationPortrait ||statusBarOrientation != UIInterfaceOrientationPortraitUpsideDown){
             return 0;
        }
    }
    // otherwise
    return UIInterfaceOrientationMaskPortrait;
}

现在,在viewDidAppear中(相信我,即使收到键盘通知,我也会使用此电话:

[UIApplication sharedApplication].statusBarOrientation = UIInterfaceOrientationPortrait;