旋转设备时切换到另一个视图控制器

Posted

技术标签:

【中文标题】旋转设备时切换到另一个视图控制器【英文标题】:switch to another view controller while rotating device 【发布时间】:2016-10-18 05:28:56 【问题描述】:

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

我会尝试: //LandscapeTabView

override func viewWillLayoutSubviews() 

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

     
    else 

    

但不知道该填写什么功能? 感谢您帮助一个菜鸟!

【问题讨论】:

【参考方案1】:

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

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

然后制作函数

func orientationChanged() 

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

UIApplication.shared.statusBarOrientation == .portrait

如果是真 - 肖像,假 - 风景

因此,取决于状态,例如,您可以在横向上push 一些 vc,并在设备返回时 pop 它。 对于推送,您可以像这样轻松创建 ViewController 的实例

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

对于流行音乐:

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

注意:您要实例化的 VC 必须存储在一个(和主)情节提要中。您还需要在“Storyboard ID”字段的 Identity Inspector 中设置一个 is(字符串“here_is_vc_id”所在的位置)。

给你:)

【讨论】:

【参考方案2】:

试试我的小努力-

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
        

    

【讨论】:

【参考方案3】:

建议的方法是有效的,但对此类更改做出反应的推荐方法是使用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...

【讨论】:

以上是关于旋转设备时切换到另一个视图控制器的主要内容,如果未能解决你的问题,请参考以下文章

在视图控制器之间切换时自动旋转

旋转设备时,动画 uiview 切换回其原始状态

iPhone如何显示不同的视图控制器以响应设备旋转?

从一个视图控制器切换到另一个视图控制器时出错

切换到另一个视图控制器时,如何保持标签栏可见? [关闭]

显示模态视图控制器时设备旋转