AVPlayerを備えたAVPlayerViewControllerを含むUIViewcontrollerがあります。 AVPlayerViewControllerの回転を有効にし(ビデオがフルスクリーンの場合)、UIViewControllerの回転を無効にします。アプリで(フルスクリーンの)ビデオに対してのみ回転を有効にするにはどうすればよいですか?
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
プロジェクトレベルで許容可能な回転を有効にしてから、回転させたくないすべてのviewControllerで回転を制限する必要があります。つまり、viewControllerが5つある場合は、そのうちの4つで回転を制限し、PlayerControllerでのみ回転を許可する必要があります。詳細については、こちらをご覧ください iOS7での1つのView Controllerの自動回転の処理