2016-11-11 3 views
2

У меня есть приложение, которое использует UISplitViewController для загрузки веб-страницы в контроллере подробного представления, который имеет свойство WKWebView. Некоторые URL-адреса являются ссылками на встроенные видеоролики YouTube, а некоторые - прямыми ссылками на файлы .mp4. В любом случае видеофайлы загружаются автоматически (после нажатия на видео YouTube) в полноэкранном системном проигрывателе, который, как я полагаю, является AVPlayerViewController. Я видел несколько сообщений о подклассах AVPlayerViewController, чтобы вращение пути внедрения supportedInterfaceOrientations и других сообщениях, которые рекомендованы либо проверки класса, когда AVPlayerViewController был представлен UIWindow «s rootViewControllerpresentedViewController в application: supportedInterfaceOrientationsForWindow: или проверке переменного на AppDelegate, который был установлен , но ни одно из этих решений не сработало для меня, потому что я не создаю или не представляю свой собственный экземпляр AVPlayerViewController, поэтому я не уверен, как разрешить поворот к пейзажу при воспроизведении этих видео.Разрешить полноэкранный пейзаж только для системы AVPlayerViewController

Есть ли способ, который я могу сказать, когда система воспроизводит видео в полноэкранном режиме, поэтому я могу разрешить поворот?

Вот ссылки на некоторые из должностей, которые я видел уже:

MPMoviePlayerViewController | Allow landscape mode

Only ONE VIEW landscape mode

ответ

1

Я надеюсь, что у все еще нужен ответ. Я нашел решение в 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 является частным классом API, у мог бы защитить urself и заменить "AVFullScreenViewController"String(format: "AV%@ViewController", "FullScreen") с

Удачи!

Смежные вопросы