旋转设备

时间:2016-10-18 05:28:56

标签: swift view controller switch-statement

是否可以仅通过向左/向右转动设备来切换到另一个视图控制器?

我会尝试: // LandscapeTabView

override func viewWillLayoutSubviews() {

    if UIDevice.current.orientation == UIDeviceOrientation.landscapeLeft || UIDevice.current.orientation == UIDeviceOrientation.landscapeRight {  

    } 
    else {

    }

但是不知道填写这个功能的内容是什么? 谢谢你帮助新手!

3 个答案:

答案 0 :(得分:0)

首先:您可以像这样订阅有关设备轮换的系统通知

NotificationCenter.default.addObserver(self, selector: #selector(self.orientationChanged), name: NSNotification.Name.UIDeviceOrientationDidChange, object: nil)

然后制作功能

func orientationChanged() {}

为了确定正确的状态,我建议使用此方法

UIApplication.shared.statusBarOrientation == .portrait

如果它是真实的 - 肖像,虚假景观

因此,依赖于状态,例如,您可以推送某些vc on landscape, pop 当设备返回时。  对于推送,您可以轻松地创建ViewController的实例,如

let vc = self.storyboard?.instantiateViewControllerWithIdentifier("here_is_vc_id") as! YourViewController

对于pop:

_ = navigationController.pushViewController(vc, animated: true)

注意:您实例化的VC必须存储在一个(和主要)故事板上。您还需要在身份检查器中设置一个is(其中字符串" here_is_vc_id"去)" Storyboard ID"字段。

你走了:))

答案 1 :(得分:0)

尝试我的努力 -

func rotated()
    {
        if(UIDeviceOrientationIsLandscape(UIDevice.currentDevice().orientation))
        {
            print("landscapeMode")
            let nextView = self.storyboard?.instantiateViewControllerWithIdentifier("HomeWorkViewController") as! HomeWorkViewController
        self.navigationController?.pushViewController(nextView, animated: true)

        }

        if(UIDeviceOrientationIsPortrait(UIDevice.currentDevice().orientation))
        {
            print("PortraitMode")
            //As you like
        }

    }

答案 2 :(得分:0)

建议的方法是有效的,但建议的方法是使用UIContentContainer协议(iOS8 +)。

然后,您可以将子视图控制器添加到控制器并控制它应如何设置动画。您可以将其用作参考:Implementing a Container View Controller

override func viewWillTransitionToSize(size: CGSize, withTransitionCoordinator coordinator: UIViewControllerTransitionCoordinator) {
    super.viewWillTransitionToSize(size, withTransitionCoordinator: coordinator)

    let isPortrait = size == UIScreen.mainScreen().fixedCoordinateSpace.bounds.size

    // Add a child view controller if landscape, remove it if portrait...
}