我有一个应用程序,它使用 UISplitViewController 在详细 View Controller 中加载网页,该 Controller 具有 WKWebView 属性。一些 URL 是嵌入的 YouTube 视频的链接,一些是 .mp4 文件的直接链接。无论哪种方式,视频文件都会自动加载(在点击 YouTube 视频之后)到全屏系统播放器中,我假设它是一个 AVPlayerViewController 。我看过几篇关于通过实现 supportedInterfaceOrientations 子类化 AVPlayerViewController 以允许旋转的帖子,以及其他建议检查 UIWindow 类的帖子的 rootViewController presentedViewController 在 application:supportedInterfaceOrientationsForWindow: 或检查 AppDelegate 上设置的变量 AVPlayerViewController 已提出,但这些解决方案都没有为我工作,因为我没有创建或呈现我自己的 AVPlayerViewController 实例,所以我不知道如何允许播放这些视频时旋转为横向。
有什么方法可以让我知道系统何时以全屏模式播放视频,以便允许旋转?
以下是我已经看过的一些帖子的链接:
MPMoviePlayerViewController | Allow landscape mode
Only ONE VIEW landscape mode
Best Answer-推荐答案 strong>
我希望你仍然需要一个答案。我在 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/
|