我有一个根视图控制器,管理其内部的所有其他控制器。因此,我重写了根视图控制器的shouldAutorotate和supportedInterfaceOrientations方法,代码如下:
public override func shouldAutorotate() -> Bool {
if let vc = view.window?.rootViewController?.presentedViewController {
if NSStringFromClass(vc.classForCoder) == "AVFullScreenViewController" {
return true
}
}
return false
}
public override func supportedInterfaceOrientations() -> UIInterfaceOrientationMask {
if let vc = view.window?.rootViewController?.presentedViewController {
if NSStringFromClass(vc.classForCoder) == "AVFullScreenViewController" {
return UIInterfaceOrientationMask.AllButUpsideDown
}
}
return UIInterfaceOrientationMask.Portrait
}
我的应用程序只支持竖屏,除非使用AVPlayerViewController观看全屏视频。
上面的代码在整个应用程序中都很好地工作。我所有的控制器和它们的视图都保持在竖屏状态,当用户全屏拍摄视频时,它会自动旋转到横屏模式,没有任何问题。
我的问题是,竖屏模式下的状态栏没有遵守方向掩码而旋转到了横屏模式,但在横屏模式下状态栏却被隐藏了。另一个奇怪的问题是,当应用程序处于横屏模式时,控制中心和通知中心现在可以像应用程序在横屏模式下一样被滑开。
最小支持的iOS版本是9.0。有什么建议吗?
window
是 nil。因此我使用self.window
访问UIApplication
的 window 属性。 - Vitalii Gozhenko