私たちが開発しているアプリでは、ユーザーが好みの向きを選択できるようにするオプションがあります(つまり、ユーザーが選択した場合Portrait
、アプリは縦向きにロックされ、選択したLandscape
場合Both
はアプリはすべての向きで動作します)私が試したことのコードであり、この機能が実現可能かどうかはまったくわかりません。
//MARK:- ORIENTATION
func changeOrientation(orientation: String) {
switch orientation {
case "Portrait":
UserDefaults.standard.set("Portrait", forKey: UserDefaultsKeys.preferredOrientation)
appDelegate.preferredOrientation = "Portrait"
let value = UIInterfaceOrientation.portrait.rawValue
UIDevice.current.setValue(value, forKey: "orientation")
break
case "Landscape":
UserDefaults.standard.set("Landscape", forKey: UserDefaultsKeys.preferredOrientation)
appDelegate.preferredOrientation = "Landscape"
let value = UIInterfaceOrientation.landscapeLeft.rawValue
UIDevice.current.setValue(value, forKey: "orientation")
break
default:
UserDefaults.standard.set("Both", forKey: UserDefaultsKeys.preferredOrientation)
appDelegate.preferredOrientation = "Both"
break
}
/*not necessary*/
let vc = UIViewController()
UIViewController.attemptRotationToDeviceOrientation()//forces to rotate
/*not necessary*/
self.present(vc, animated: false, completion: nil)
UIView.animate(withDuration: 0.3, animations: {
vc.dismiss(animated: false, completion: nil)
})
/*not necessary*/
}
open override var supportedInterfaceOrientations: UIInterfaceOrientationMask{
get {
switch appDelegate.preferredOrientation {
case "Portrait":
return .portrait
case "Landscape":
return .landscape
default:
return .all
}
}
}
open override var shouldAutorotate: Bool {
get {
return true
}
}
ただし、ポートレート モードで「ランドスケープ」を選択すると、自動的にランドスケープに切り替わります。ただし、デバイスを回転させて縦向きに戻すと、同様に機能します (要件に従って機能しないはずです)。この要件は、プロジェクトをポートレート モードのみでセットアップした場合と、デバイスをランドスケープ モードに回転させた場合の動作に似ています。