ios - 仅允许系统 AVPlayerViewController 的全屏横向

标签 ios objective-c rotation avplayer

我有一个应用程序,它使用 UISplitViewController 在具有 WKWebView 属性的详细 View Controller 中加载网页。有些 URL 是指向嵌入式 YouTube 视频的链接,有些是指向 .mp4 文件的直接链接。无论哪种方式,视频文件都会自动加载(在点击 YouTube 视频后)到全屏系统播放器中,我假设它是一个 AVPlayerViewController。我看过几篇关于子类化 AVPlayerViewController 以允许通过实现 supportedInterfaceOrientations 进行旋转的帖子,以及其他建议检查 UIWindow 类的帖子的 rootViewController presentedViewController in application: supportedInterfaceOrientationsForWindow: 或检查 AppDelegate 上的变量,该变量在 时设置code>AVPlayerViewController 被呈现,但这些解决方案都没有为我工作,因为我没有创建或呈现我自己的 AVPlayerViewController 实例,所以我不确定如何允许播放这些视频时旋转为横向。

有什么方法可以判断系统何时以全屏模式播放视频,以便允许旋转?

以下是我已经看过的一些帖子的链接:

MPMoviePlayerViewController | Allow landscape mode

Only ONE VIEW landscape mode

最佳答案

我希望你仍然需要一个答案。我在 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/

相关文章:

ios - 在表格 View 中使用手动按钮

ios - iCarousel 自定义 View xib 自动更改 subview 宽度

ios - 使用 UIBezierPath 在 Swift 3.x 中画一条线

objective-c - NSPrintOperation从不调用drawRect :

ios - 从另一个类调用getter方法

android - 在Android中旋转90度后调整 View 的宽度和高度

ios - Swift 微调器/选择器不保存或显示整数

ios - 为什么在 SceneKit 中不调用 Contact Delegate?

c# - 如何旋转我单击的立方体而不是所有立方体同时旋转?

ios - 旋转设备时,动画 uiview 切换回其原始状态