简体   繁体   中英

iOS Allow different screen orientation withouth autorotation

I want to keep a portrait orientation even if user rotate the phone. At the same time, I want to change the orientation with a button. If I put only portrait as supported orientation in plist and then rotate, application gives me error. If I put all the supported orientation but shouldAutorotate method to NO, Application crashes. So, basically as I can see I can only support multiple orientation if I let the application to autorotate.

Can I achieve what I need?

shouldAutorotate

this is a get-only property.

what you can do is:

override var shouldAutorotate: Bool {
    return false
}

Maybe this is also interesting for you: how to dissable and enable auto rotate on swift?

May be the following line of code will work for you. set orientation programmatically.

  1. In your Appdelegate class write this code:

    var orientationLock = UIInterfaceOrientationMask.all

    func application(_ application: UIApplication, supportedInterfaceOrientationsFor window: UIWindow?) -> UIInterfaceOrientationMask { return self.orientationLock }

2.Make custom helper class as follows:

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

}
  1. then use it in your desire viewcontroller like:

    override func viewDidAppear(_ animated: Bool) { super.viewDidAppear(animated)

     AppUtility.lockOrientation(.portrait) // Or to rotate and lock // AppUtility.lockOrientation(.portrait, andRotateTo: .portrait) 

    }

    override func viewWillDisappear(_ animated: Bool){ super.viewWillDisappear(animated)

     // Don't forget to reset when view is being removed AppUtility.lockOrientation(.all) 

    }

note: keep remember Require Full Screen option is checked from target settings.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM