检测iOS中的旋转更改

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

我希望有一种方法可以在界面改变方向时得到通知。

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

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

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

有几种方法可以做到,你可以在UIViewController类的引用中找到它们:

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

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

编辑:

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

斯威夫特3:

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

从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` }) }