我正在制作一款iOS应用程序,需要在旋转时进行一些界面重新排列。我尝试通过实现- (void)orientationChanged:(NSNotification *)note
来检测旋转,但这会通知我设备朝上或朝下的情况。
我想找到一种只在接口方向改变时得到通知的方法。
我正在制作一款iOS应用程序,需要在旋转时进行一些界面重新排列。我尝试通过实现- (void)orientationChanged:(NSNotification *)note
来检测旋转,但这会通知我设备朝上或朝下的情况。
我想找到一种只在接口方向改变时得到通知的方法。
有几种方法可以做到这一点,您可以在UIViewController类参考中找到它们:
– willRotateToInterfaceOrientation:duration:
– willAnimateRotationToInterfaceOrientation:duration:
– didRotateFromInterfaceOrientation:
你也可以在viewWillLayoutSubviews
方法中实现它,但是要小心使用,因为它会在屏幕出现时以及每次添加子视图时调用。
编辑:
解决方案现已过时,请查看已接受的答案。
自从iOS 8之后,上述方法已被弃用,处理和检测设备旋转的正确方法是:
-(void) viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id )coordinator;
要检测设备方向,您应该(根据文档): 调用statusBarOrientation方法来确定设备方向
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`
})
}
Swift 3:
override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) {
}