2017-08-18 7 views
0

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

} 

customCameraViewviewDidLoad()に、私は.landscapeLeftにロックする方向に設定しています:私はロックを解除するために、私のviewWillDissapear方法でこれを設定していビューを離れる前に

AppUtility.lockOrientation(.landscapeLeft) 

をオリエンテーション:

AppUtility.lockOrientation(.all) 

問題はcustomCameraView作品にランドスケープモードのみときですデバイスの自動回転が有効(ロックされていない)になり、以前のView Controllerに戻ると、最初はlandscapeLeftに表示されるので、デバイスをポートレートモードにする必要があります。このビューは、AppUtility拡張子を使用してポートレート方式でロックされます。

私は常にshouldAutoRotate varを無効にして自動回転を有効にすることを考えましたが、デバイスの自動回転がロックされていると機能しませんでした。

は、それから私は、自動回転はこれが不可能であることを言っているのstackoverflow上の人のカメラが、100を開く前に、有効になっていることを確認することを考えました。

私にとって完璧な解決策は、回転が有効になっているかどうかに関わらず常にlandscapeLeftモードでcustomCameraViewを作成し、前のビューをポートレートで作成することです。

私はこのバグを数日間苦労しています。

答えて

1

あなたが必要customCameraViewコントローラ上のコードの下に適用することができます。

override var supportedInterfaceOrientations: UIInterfaceOrientationMask { 
    return UIInterfaceOrientationMask.landscapeLeft 
} 
+0

はこのいただきありがとうございます。実際の解決策は、.portraitモードですべてのアプリケーションを制限し、customCameraViewのsupportedInterfaceOrientationsをオーバーライドすることです。ネイサンにも感謝します。私の経験で –

+0

これは、異なる配向を持つビューコントローラ間で移行する場合は特に、制限をたくさん持っています。 – nathan

+0

@nathanこれは完全に私のために働く、私はちょうど風景モードでアプリを設定し、私は風景モードでcameraViewのみを設定しています。 cameraViewControllerを終了した後、ポートレートモードになるように、以前のコントローラをポートレートに設定しました。 –

1

は、iOSは、縦と横の両方をサポートするために開発を奨励し、他の肖像があるがランドスケープであるとアプリケーションの一部を制限することは困難です。かなりうまく機能

1つのオプションは、プロジェクト設定でポートレートモードに全体のアプリを制限し、回転がランドスケープする必要が任意のビューコントローラに変換を適用することです。この方法では、ビューは景観のように見え、動作し、ビューの回転を完全に制御できます。

関連する問題