2017-07-19 67 views
0

即使用戶鎖定了他的方向,是否有任何方法檢測屏幕方向?我的應用程序使用自定義相機視圖,我希望能夠根據方向以橫向或縱向保存圖像。我目前使用下面的代碼來檢測方向,但是這隻有在用戶沒有鎖定它時纔有效。viewWillTransitionToSize鎖定方向

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,我可以將圖像保存爲橫向或縱向。但是,我想在拍攝照片時檢測設備是處於橫向模式還是縱向模式,因此我知道如何旋轉圖像。這是有效的,但是如果用戶的方向鎖定在他的設備上,那麼它不起作用。 –