检测iOS中的旋转更改

时间:2013-01-16 22:41:09

标签: ios interface nsnotificationcenter screen-rotation auto-rotation

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

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

4 个答案:

答案 0 :(得分:27)

有几种方法可以做到,你可以在UIViewController class reference

中找到它们
– willRotateToInterfaceOrientation:duration:
– willAnimateRotationToInterfaceOrientation:duration:
– didRotateFromInterfaceOrientation:

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

修改

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

答案 1 :(得分:17)

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

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

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

答案 2 :(得分:5)

斯威夫特3:

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

}

答案 3 :(得分: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`
    })
}