iOS viewWillTransitionToSize和设备方向

14

我使用 viewWillTransitionToSize 方法来检测设备是否旋转到横向模式。根据目标尺寸,我可以检测是否朝着横向模式,并根据需要调整我的 traits...


override func viewWillTransitionToSize(size: CGSize, withTransitionCoordinator coordinator: UIViewControllerTransitionCoordinator) {

    if size.width > size.height {
        self.setOverrideTraitCollection(UITraitCollection(horizontalSizeClass: UIUserInterfaceSizeClass.Regular), forChildViewController: viewController)
    }
    else{
        self.setOverrideTraitCollection(nil, forChildViewController: viewController)
    }

    super.viewWillTransitionToSize(size, withTransitionCoordinator: coordinator)
}

然而,我希望能够检测设备是否正在进行横向左侧或横向右侧的转换。这将允许我根据设备的特定方向创建不同的行为或视图(左侧或右侧)。

如果不使用任何已弃用的函数,这是否可能?

我考虑过使用状态栏方向...

    let orientation = UIApplication.sharedApplication().statusBarOrientation;
    if( orientation == UIInterfaceOrientation.LandscapeLeft )
    {
        // Do something
    }
    else if( orientation == UIInterfaceOrientation.LandscapeRight )
    {
        // Do something else
    }

...但这并没有帮助,因为这似乎给出了“旧”的状态方向。

我该如何获取特定的目标方向?

2个回答

16

您可以使用 UIViewControllerTransitionCoordinator 实现旋转时获取方向,具体操作如下:

override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) {
    super.viewWillTransition(to: size, with: coordinator)

    // will execute before rotation

    coordinator.animate(alongsideTransition: { (context: UIViewControllerTransitionCoordinatorContext) in

        // will execute during rotation
        let orientation = UIApplication.shared.statusBarOrientation
        if orientation == .landscapeLeft 
        {
            // Do something
        } 
        else if orientation == .landscapeRight 
        {
            // Do something else
        }
    }) { (context: UIViewControllerTransitionCoordinatorContext) in
        // will execute after rotation
    }
}

-3

使用[UIDevice currentDevice].orientation


1
UIInterfaceOrientation 是相关的枚举,而不是 UIDeviceOrientation。 - Sam Stow

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接