私はSwift 3とXcode 8.3.3を使用しているiOS 10アプリで作業しています。 私のアプリでは、カメラのインジケータを使って連続して8枚の写真を撮る必要があります。Swiftは手動でビューコントローラを回転します
カスタムカメラ用にAVCaptureVideoPreviewLayer
を使用しています。カメラを風景モードで表示するように設定する必要があります。 問題を探している間にstackoverflowで見つけたこの拡張機能を使って行った。
struct AppUtility {
static func lockOrientation(_ orientation: UIInterfaceOrientationMask) {
if let delegate = UIApplication.shared.delegate as? AppDelegate {
delegate.orientationLock = orientation
}
}
/// OPTIONAL Added method to adjust lock and rotate to the desired orientation
static func lockOrientation(_ orientation: UIInterfaceOrientationMask, andRotateTo rotateOrientation:UIInterfaceOrientation) {
self.lockOrientation(orientation)
UIDevice.current.setValue(rotateOrientation.rawValue, forKey: "orientation")
}
}
とcustomCameraView
のviewDidLoad()
に、私は.landscapeLeft
にロックする方向に設定しています:私はロックを解除するために、私のviewWillDissapear
方法でこれを設定していビューを離れる前に
AppUtility.lockOrientation(.landscapeLeft)
をオリエンテーション:
AppUtility.lockOrientation(.all)
問題はcustomCameraView
作品にランドスケープモードのみときですデバイスの自動回転が有効(ロックされていない)になり、以前のView Controllerに戻ると、最初はlandscapeLeftに表示されるので、デバイスをポートレートモードにする必要があります。このビューは、AppUtility
拡張子を使用してポートレート方式でロックされます。
私は常にshouldAutoRotate
varを無効にして自動回転を有効にすることを考えましたが、デバイスの自動回転がロックされていると機能しませんでした。
私にとって完璧な解決策は、回転が有効になっているかどうかに関わらず常にlandscapeLeftモードでcustomCameraView
を作成し、前のビューをポートレートで作成することです。
私はこのバグを数日間苦労しています。
はこのいただきありがとうございます。実際の解決策は、.portraitモードですべてのアプリケーションを制限し、customCameraViewのsupportedInterfaceOrientationsをオーバーライドすることです。ネイサンにも感謝します。私の経験で –
これは、異なる配向を持つビューコントローラ間で移行する場合は特に、制限をたくさん持っています。 – nathan
@nathanこれは完全に私のために働く、私はちょうど風景モードでアプリを設定し、私は風景モードでcameraViewのみを設定しています。 cameraViewControllerを終了した後、ポートレートモードになるように、以前のコントローラをポートレートに設定しました。 –