17

我正在制作一个 iOS 应用程序,它需要在旋转时进行一些界面重新排列。我试图通过实现来检测这一点- (void)orientationChanged:(NSNotification *)note,但这会通知我设备何时面朝上或面朝下。

我想要一种在界面改变方向时得到通知的方法。

4

4 回答 4

27

有几种方法可以做到这一点,你可以在UIViewController 类参考中找到它们:

– willRotateToInterfaceOrientation:duration:
– willAnimateRotationToInterfaceOrientation:duration:
– didRotateFromInterfaceOrientation:

您也可以在viewWillLayoutSubviews方法中执行此操作,但要小心,因为它也会在屏幕外观上调用,并且每当您添加子视图时都会调用它。

编辑:

现已弃用解决方案,请参阅已接受的答案。

于 2013-01-16T22:47:24.353 回答
23

从 iOS 8 开始,上述方法已被弃用,处理和检测设备旋转的正确方法是:

-(void) viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id)coordinator;

要检测设备方向,您应该(根据文档):调用statusBarOrientation方法来确定设备方向

于 2016-05-30T18:50:18.343 回答
8

从 iOS 8 开始,这是正确的方法。

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

    coordinator.animate(alongsideTransition: { context in
        // This is called during the animation
    }, completion: { context in
        // This is called after the rotation is finished. Equal to deprecated `didRotate`
    })
}
于 2018-02-12T08:37:02.173 回答
5

斯威夫特 3:

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

}
于 2017-01-09T21:11:08.237 回答