当需要在仅纵向应用程序中使全屏AVPlayer支持横向方向时,最普遍的建议是添加AVFullScreenViewController某种方式作为例外并使其支持横向方向。例如,将此类名称添加到supportedInterfaceOrientations(for:)您的AppDelegate.
但是,它对我从来没有用过(尽管我只在 iOS 11 中检查过它),我不得不为UIViewController包含视频作为子视图的子类添加这样的异常。(在我的例子中,为了让这个视图控制器在视频不是全屏时只支持纵向模式,并在视频全屏时支持纵向和陆地空间方向。)
令人惊讶的是,它在 iOS 12 中不起作用。一项小型研究发现,Apple 在内部更改了 AVKit 中的全屏演示机制。(避免使用内部 API 的明显标志。)
以前版本的视图层次结构基于UIWindow持有的实例,UITransitionView并且您可以并行地查看层次结构。UITransitionView持有该AVFullScreenViewController实例。(iOS11截图)
iOS 12 版本的视图层次结构看起来非常不同:这次是两个窗口。第一个是熟悉UIWindow的,它包含您的视图层次结构。第二个对我来说是新的 -AVWindow实例在其中包含UITransitionView和AVFullScreenViewController一个UIViewController不确定的子类作为兄弟。(iOS12截图)
当我尝试旋转屏幕时supportedInterfaceOrientations,会同时调用AVFullScreenViewController未知UIViewController子类的方法。(更准确地说,我不能确定supportedInterfaceOrientations该子类是否准确地调用了它UIViewController,但很可能是这样。)
那么,还有其他人遇到过这个问题吗?有解决方案或解决方法吗?
感谢您提前参与!
PS我很抱歉画了我的内部类名,这个截图来自我公司的项目。
PPS 现在我最终支持我的窗口的所有方向,AppDelegate并在每个视图控制器子类中覆盖supportedInterfaceOrientations以仅支持纵向。