如果您有一个UIWindow
的应用,我的理解是rootViewController
的{{1}}将是UIWindow
接收旋转/定位方法,例如{ {1}},UIViewController
等
我正在编写一个外部库,并且有一个实例,我创建另一个shouldAutoRotate
对象,设置其shouldAutoRotateToInterfaceOrientation
,并使其键和可见。看起来原始窗口的UIWindow
仍然是发送旋转方法而不是新方法的窗口。
我希望能够在新窗口可见时控制应用程序是否可以旋转,但似乎原始窗口的rootViewController
仍然可以控制它。我尝试将原始窗口的rootViewController
设置为rootViewController
,禁止在我的新窗口可见时旋转屏幕,并将原始窗口的rootViewController
重置为其原始rootViewController
但这会导致一些问题。
是否有人知道如何让某个rootViewController
负责应用轮播?
答案 0 :(得分:0)
你是如何呈现新的viewController的?根据文档,被问及supportedInterfaceOrientations
的唯一viewControllers是根视图控制器,或填充屏幕的视图控制器。因此,在iPhone上,如果新的viewController正在填充屏幕(例如,以模态方式呈现),则应该接收supportedInterfaceOrientations
调用。
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;