设备方向更改时更改ViewController?

时间:2016-06-14 15:23:35

标签: ios swift viewcontroller

我试图弄清楚当方向改变时如何切换VC。我有2个不同的,portraitVC和landscapeVC,在同一个故事板中。目标是在横向上发生基本相同的事情,但使用不同的UIImage。有人有帮助吗?

逻辑应该是这样的:

if orientation is landscape {
    use landscapeVC 
} else {
    Use portraitVC
}

1 个答案:

答案 0 :(得分:1)

好的,我不太确定你想要实现的目标,但这里有两个可能的解决方案:

1。在旋转时更改UIImageView图像

您可以添加一个观察者,以便在设备更改方向时收到通知。

将此添加到viewDidLoad():

NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(didRotate), name: UIDeviceOrientationDidChangeNotification, object: nil)

当方向改变时,将调用以下函数:

func didRotate(notification: NSNotification) {
    if UIDeviceOrientationIsLandscape(UIDevice.currentDevice().orientation) {
        // Change UIImageView image here
    }

    if UIDeviceOrientationIsPortrait(UIDevice.currentDevice().orientation) {
        // Change UIImageView image here
    }
}

您可以使用此代码更改纵向或横向方向的图像。哦!并且不要忘记在viewWillDisappear()中删除观察者:

NSNotificationCenter.defaultCenter().removeObserver(self)

2。在旋转时更改布局和UI

这有点棘手,但并不困难。您需要使用Storyboard Size Classes。

Compact x Regular Size Class

检查上图中下部分。查看它所在的位置 wCompact hRegular ,这意味着您要为纵向设计所有iPhone。对于风景中的iPhone,请使用 wAny hCompact 。看看如何禁用上图中的某些约束?这是因为它们对特定的大小类没有效果。

Any x Compact Size Class

通过使用尺寸类,您不仅可以自定义纵向和横向的UI,还可以为更具体的设备(iPhone和iPad)自定义UI。您可以阅读有关此主题here的更多信息。

我希望这有帮助! :)