如果您只有一个以上的ViewController,如何检测到景观的过渡

时间:2019-05-04 06:48:33

标签: swift autolayout landscape-portrait viewwilltransitiontosize

我有一个只有4个视图控制器的小型应用程序,我想在用户向/从横向转换时更改布局。我想出了如何检查风景的方法,但是该函数存在于一个viewController类中,并且不清楚在viewWillTransition触发时如何让其他viewController采取措施。是否在每个视图控制器类中放置该重写函数的版本以执行特定于它的操作?当我尝试在一次争吵之后在两个班级中使用替代项时,它们都被解雇了,并且感觉不像是“正确的方法”,因此我想请教专家。

在应用启动时使用下面的代码,我为它是否处于横向状态设置了一个全局布尔值,并使用viewWillTransition来检测更改。

    override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) {
    super.viewWillTransition(to: size, with: coordinator)
    print("Will Transition to size \(size) from super view size \(self.view.frame.size)")

    if (size.width > self.view.frame.size.width) {
        print("Landscape")
        inLandscapeMode = true
    } else {
        print("Portrait")
        inLandscapeMode = false
    }

    if (size.width != self.view.frame.size.width) {
        DispatchQueue.main.async {
            // DO SOMETHING LIKE reload a Table/Collection view to ensure no dequeued cells have old constraints... self.tableView.reloadData()
        }
    }
}
func setUpFormatting(){
    let size = UIScreen.main.bounds.size
    print("On App Start size \(size)")
    if size.width > size.height {
        print("Landscape")
        inLandscapeMode = true
    } else {
        print("Portrait")
        inLandscapeMode = false
    }
}

全部

1 个答案:

答案 0 :(得分:0)

您可以通过该值在每个视图控制器和设置视图中获取设备方向

if UIDevice.current.orientation == .portrait {

} else if UIDevice.current.orientation == .landscapeLeft || UIDevice.current.orientation == .landscapeRight {

}