我有一个应用程序,它使用 UISplitViewController
在具有 WKWebView
属性的详细 View Controller 中加载网页。有些 URL 是指向嵌入式 YouTube 视频的链接,有些是指向 .mp4 文件的直接链接。无论哪种方式,视频文件都会自动加载(在点击 YouTube 视频后)到全屏系统播放器中,我假设它是一个 AVPlayerViewController
。我看过几篇关于子类化 AVPlayerViewController
以允许通过实现 supportedInterfaceOrientations
进行旋转的帖子,以及其他建议检查 UIWindow
类的帖子的 rootViewController
presentedViewController
in application: supportedInterfaceOrientationsForWindow:
或检查 AppDelegate
上的变量,该变量在 时设置code>AVPlayerViewController
被呈现,但这些解决方案都没有为我工作,因为我没有创建或呈现我自己的 AVPlayerViewController
实例,所以我不确定如何允许播放这些视频时旋转为横向。
有什么方法可以判断系统何时以全屏模式播放视频,以便允许旋转?
以下是我已经看过的一些帖子的链接:
最佳答案
我希望你仍然需要一个答案。我在 Swift 中找到了解决方案,但它在 Objective C 中可以简单地转换。我发现,当使用 WKWebView(也可能是 UIWebView)时,全屏视频显示在新的 UIWindow 中(至少在 iOS 10 上)。该窗口有空白的 UIViewController 并在其上呈现 AVFullScreenViewController。
因此,在您的 AppDelegate 中,您应该像这样实现 application:supportedInterfaceOrientationsForWindow:
func application(_ application: UIApplication, supportedInterfaceOrientationsFor window: UIWindow?) -> UIInterfaceOrientationMask {
if window != self.window, let pvc = window?.rootViewController?.presentedViewController, "\(type(of: pvc))" == "AVFullScreenViewController" {
return pvc.isBeingDismissed ? .portrait : .all
}
return .portrait
}
虽然 AVFullScreenViewController 是私有(private) API 类,但您可以保护自己并将 "AVFullScreenViewController"
替换为 String(format: "AV%@ViewController", "FullScreen ")
祝你好运!
关于ios - 仅允许系统 AVPlayerViewController 的全屏横向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40555385/