2017-07-19 2 views
0

ユーザーが向きを固定しても画面の向きを検出する方法はありますか?私のアプリケーションは、カスタムのカメラビューを使用して、私は風景や肖像画の向きに応じて画像を保存することができるようにしたいと思います。私は現在、次のコードを使用して方向を検出していますが、これはユーザーがロックしていない場合にのみ機能します。viewWillTransitionToSize for locked orientation

override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) { 
     let orientation: UIDeviceOrientation = UIDevice.current.orientation 

     switch (orientation) { 
     case .portrait: 
      print("Portrait") 
     case .landscapeRight: 
      print("Left") 
     case .landscapeLeft: 
      print("Right") 
     default:break 
     } 
    } 

カメラの向きを正しく操作する方法でない場合は、正しい方向に私を案内してください。

+0

カスタムカメラは、あなたのビューコントローラに埋め込まれていますか?もしそうなら、私は今あなたがポートレートモードでのみ画像を保存できることを理解していますか? – kamil3

+0

はい、私は一度に複数の画像を取得し、一度にすべての画像を自分のプロファイルに保存する必要がありました。だから、アップルの普通のイメージピッカーは私にとってはうまくいかなかった。すべての画像は肖像画になりますが、すべて動作します。景観でイメージを取得することは絶対にありませんか?これは少し奇妙なようです –

+0

それはハックですが、おそらく加速度計やジャイロスコープを使ってデバイスの姿勢が変わったことを知ることができます – Malik

答えて

0

私はこれを行うための唯一の方法は、プロジェクトに肖像画や風景モードの両方を有効にしていることを信じている: enter image description here

その後、ランドスケープモードを必要としないすべてのビューコントローラでこれらのプロパティをオーバーライドします。埋め込まれたカメラとビューコントローラで

override var shouldAutorotate: Bool { 
    return false 
} 

override var supportedInterfaceOrientations: UIInterfaceOrientationMask { 
    return .portrait 
} 

override var preferredInterfaceOrientationForPresentation: UIInterfaceOrientation { 
    return .portrait 
} 

ちょうど偽shouldAutorotateを設定し、風景の中に使用されている余分なsupportedInterfaceOrientationsを追加します。あなたはUINavigationControllerまたはUITabBarControllerを使用している場合、それは動作しませんので、あなたは、これらの拡張機能を作成する必要があることを

注:https://stackoverflow.com/a/39674618/5381663

+0

私たちはお互いを誤解したと思います。私は間違って説明したかもしれない。画像を撮影した後でUIImageOrientationをハードコードすると、画像を風景や肖像画として保存することができます。しかし、画像を回転する方法を知っているので、画像を撮るときにデバイスが横または縦モードにあったかどうかを検出したい。これはうまくいきますが、ユーザーが自分のデバイスにロックされた方向を持っている場合、効果はありません。 –

関連する問題