如何在 iPad 中检查设备方向从纵向到横向和反之亦然的变化 [重复]

Posted

技术标签:

【中文标题】如何在 iPad 中检查设备方向从纵向到横向和反之亦然的变化 [重复]【英文标题】:How to check Device Orientation Change From Portrait To Landscape and Vice-Versa in iPad [duplicate] 【发布时间】:2016-04-13 07:41:03 【问题描述】:

我有一个拆分视图控制器,我在其中展示了一个弹出框。现在,当设备方向从横向变为纵向时,我必须运行一段代码,如果它从纵向变为横向,我必须运行另一段代码。如何在 Swift 中实现这一点。

【问题讨论】:

【参考方案1】:

更新到 Swift 4: 在ViewDidLoad中添加以下代码:

NotificationCenter.default.addObserver(self, selector: #selector(orientationChanged), name:  Notification.Name("UIDeviceOrientationDidChangeNotification"), object: nil)

然后,创建一个如下所示的函数

@objc func orientationChanged() 

    if(UIDeviceOrientationIsLandscape(UIDevice.current.orientation))

        print("landscape")
    

    if(UIDeviceOrientationIsPortrait(UIDevice.current.orientation))

        print("Portrait")
    


希望对你有帮助:)

【讨论】:

UIDeviceOrientation != UIInterfaceOrientation【参考方案2】:

ios 8.0 开始,您可以使用以下方法检测方向变化。

在objective-c中

- (void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator

迅速

func viewWillTransitionToSize(_ size: CGSize,
    withTransitionCoordinator coordinator: UIViewControllerTransitionCoordinator)

你可以从尺寸上找出来。

【讨论】:

这个方法没有被调用。我有一个拆分视图控制器 UISplitViewContoller 也是 UIVIewController 的子类,应该被调用。更重要的一点是检查您是否使用 super 调用此方法。viewWillTransitionToSize:withTransitionCoordinator: 似乎仅在界面实际要更改大小时才有效,这意味着我们已旋转 90 度。如果你的布局上有一个只允许横​​向的蒙版,当旋转 180 度时,界面大小不会改变,所以这个方法似乎没有被调用。

以上是关于如何在 iPad 中检查设备方向从纵向到横向和反之亦然的变化 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何在 iPad 的 UiSplitviewcontroller 中显示主视图

IOS 设备方向卡在纵向模式,没有横向

iPad 纵向应用程序以横向模式加载 iAd

当我在 iOS7 的 iPad 中将视图从纵向旋转到横向或反之亦然时,UITextfield shouldChangeCharactersInRange 没有调用

应用动画从纵向到横向

iPad - 根据设备方向(纵向或横向)更改图像