2

私たちが開発しているアプリでは、ユーザーが好みの向きを選択できるようにするオプションがあります(つまり、ユーザーが選択した場合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
    }
}

ただし、ポートレート モードで「ランドスケープ」を選択すると、自動的にランドスケープに切り替わります。ただし、デバイスを回転させて縦向きに戻すと、同様に機能します (要件に従って機能しないはずです)。この要件は、プロジェクトをポートレート モードのみでセットアップした場合と、デバイスをランドスケープ モードに回転させた場合の動作に似ています。

4

1 に答える 1