web-dev-qa-db-ja.com

iOS:AVPlayerViewControllerは、縦向きのアプリケーションで全画面回転を有効にします

AVPlayerを備えたAVPlayerViewControllerを含むUIViewcontrollerがあります。 AVPlayerViewControllerの回転を有効にし(ビデオがフルスクリーンの場合)、UIViewControllerの回転を無効にします。アプリで(フルスクリーンの)ビデオに対してのみ回転を有効にするにはどうすればよいですか?

14
ton252

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")
        }
    }

私にとってはこれが良かった。拡張するだけですAVPlayerViewController

import AVKit
import UIKit

class AVPlayerViewControllerRotatable: AVPlayerViewController {

    override var shouldAutorotate: Bool {
        return true
    }

}

スウィフト4

1
ergunkocak

プロジェクトレベルで許容可能な回転を有効にしてから、回転させたくないすべてのviewControllerで回転を制限する必要があります。つまり、viewControllerが5つある場合は、そのうちの4つで回転を制限し、PlayerControllerでのみ回転を許可する必要があります。詳細については、こちらをご覧ください iOS7での1つのView Controllerの自動回転の処理

0
Tim Bull