ios - 当设备方向改变时改变 ViewController?

标签 ios swift viewcontroller

我正在尝试弄清楚如何在方向改变时切换 VC。我在同一个 Storyboard中有 2 个不同的,portraitVC 和 landscapeVC。目标是在风景中发生本质上相同的事情,但使用不同的 UIImage。有人能帮忙吗?

逻辑应该是这样的:

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

最佳答案

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

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 .

希望对您有所帮助! :)

关于ios - 当设备方向改变时改变 ViewController?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37816162/

相关文章:

iOS - 本地图 View 发生变化(滚动、缩放)时,Mapkit 会保持用户位置动画

ios - 您将如何实现只显示选定单元格的表格?

objective-c - UIAlertView 按钮显示 viewController

ios - 调用 View Controller 类而不弹出 View Controller 本身

ios - 准备在 for 循环内进行 segue

ios - 如何在 Xcode 中显示模拟按钮?

ios - WatchOS2 心率

xcode - CFString 不符合 Hashable 协议(protocol)?

objective-c - 如何调用 xxxxWithClass :(class) in swift

swift - 为什么array的append方法不能在viewController中使用?