当我们开始旋转设备时,什么方法将被调用,并完成后

我想检测一个在编程上的iPad的旋转过程。 在这种情况下,我想设置一个布尔值为是,当旋转将开始,并将其设置为假旋转后结束。 有没有什么方法调用,当旋转将开始和旋转结束?

来自Apple Docs:

在用户界面开始旋转之前发送到视图控制器。

- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration 

用户界面旋转后发送到视图控制器:

 - (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation 

在这里看到更多: UIViewController类参考 – >响应视图旋转事件

注意:这是不赞成,看到这个职位

对于这篇文章的新手来说,Nektobuild议的方法已经在iOS 8中被弃用了。苹果build议使用:

 -(void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator 

您可以使用“尺寸”参数作为一种简单的方法来确定是否正在转换为纵向或横向。

 if (size.width > size.height) { // Position elements for Landscape } else { // Position elements for Portrait } 

更多信息可在文档中find 。

以上所有方法(在@Nekto的答案中)都在iOS8.0及更高版本中被弃用。 来源: iOS开发人员库

从iOS 8开始,所有旋转相关的方法都被弃用了 。 相反,旋转视为视图控制器视图大小的变化,因此使用viewWillTransitionToSize:withTransitionCoordinator:方法进行报告。 当界面方向改变时,UIKit在窗口的根视图控制器上调用这个方法。 该视图控制器然后通知其子视图控制器,在整个视图控制器层次结构中传播消息。

在iOS8或更高版本中,您可以使用下面的方法。

 - (void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id <UIViewControllerTransitionCoordinator>)coordinator { [super viewWillTransitionToSize:size withTransitionCoordinator:coordinator]; [coordinator animateAlongsideTransition:^(id<UIViewControllerTransitionCoordinatorContext> context) { // Stuff you used to do in willRotateToInterfaceOrientation would go here. // If you don't need anything special, you can set this block to nil. } completion:^(id<UIViewControllerTransitionCoordinatorContext> context) { // Stuff you used to do in didRotateFromInterfaceOrientation would go here. // If not needed, set to nil. }]; } 

在UISplitViewController协议中,iOS8的新方法是

 - (void)splitViewController:(UISplitViewController *)svc willChangeToDisplayMode:(UISplitViewControllerDisplayMode)displayMode 

有四种显示模式:

 typedef enum UISplitViewControllerDisplayMode : NSInteger { UISplitViewControllerDisplayModeAutomatic, UISplitViewControllerDisplayModePrimaryHidden, UISplitViewControllerDisplayModeAllVisible, UISplitViewControllerDisplayModePrimaryOverlay, } UISplitViewControllerDisplayMode; 

这种方法永远不会返回自动。