У меня есть UIViewcontroller, который содержит AVPlayerViewController с AVPlayer. Я хочу включить поворот для AVPlayerViewController (когда видео находится в полноэкранном режиме) и отключить любое вращение для UIViewController. Как включить ротацию только для видео (в полноэкранном режиме) в моем приложении?
IOS: AVPlayerViewController включает полноэкранное вращение в портретном приложении
Ответ 1
Swift 2.2 В AppDelegate разрешить вращение для игрока:
func application(application: UIApplication, supportedInterfaceOrientationsForWindow window: UIWindow?) -> UIInterfaceOrientationMask {
guard let vc = (window?.rootViewController?.presentedViewController) else {
return .Portrait
}
if (vc.isKindOfClass(NSClassFromString("AVFullScreenViewController")!)) {
return .AllButUpsideDown
}
return .Portrait
}
Затем создайте и используйте подкласс AVPlayerViewController для возврата в портретный режим при выходе из полноэкранного режима:
class YourVideoPlayer: AVPlayerViewController {
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
if view.bounds == contentOverlayView?.bounds {
UIDevice.currentDevice().setValue(UIInterfaceOrientation.Portrait.rawValue, forKey: "orientation")
}
}
Ответ 2
Вам нужно включить разрешенные вращения на уровне проекта, а затем ограничить вращение на всех наблюдаемых контроллерах, которые вы НЕ хотите вращать. т.е. если у вас есть 5 viewControllers, вам необходимо ограничить поворот на 4 из них и разрешить вращение на контроллере проигрывателя. Здесь вы можете увидеть больше Обработка авторотации для одного контроллера представления в iOS7
Ответ 3
Для меня это было лучше. Просто добавьте AVPlayerViewController:
import AVKit
import UIKit
class AVPlayerViewControllerRotatable: AVPlayerViewController {
override var shouldAutorotate: Bool {
return true
}
}
Swift 4