IOS: AVPlayerViewController включает полноэкранное вращение в портретном приложении

У меня есть UIViewcontroller, который содержит AVPlayerViewController с AVPlayer. Я хочу включить поворот для AVPlayerViewController (когда видео находится в полноэкранном режиме) и отключить любое вращение для UIViewController. Как включить ротацию только для видео (в полноэкранном режиме) в моем приложении?

Ответ 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