Detect rotation changes in iOS

2019-08-07 03:11发布

我想提出一个iOS应用程序,需要在旋转时做一些界面重排。 我试图通过实施检测到这种- (void)orientationChanged:(NSNotification *)note ,但是这让我对当设备朝上或朝下的通知。

我希望在接口改变方向,只是得到通知的方式。

Answer 1:

由于iOS 8的,上述方法被弃用,以处理和检测装置的旋转的适当方法是:

- (无效)viewWillTransitionToSize:(CGSize)大小withTransitionCoordinator:(ID)协调器;

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



Answer 2:

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

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

你也可以做到这一点的viewWillLayoutSubviews方法,但要小心,因为它被称为在屏幕上亮相过了,只要你添加一个子视图。

编辑:

解决方案现在已经过时,见接受的答案。



Answer 3:

斯威夫特3:

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

}


Answer 4:

由于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`
    })
}


文章来源: Detect rotation changes in iOS