如何临时锁定iPad/iPhone方向

如何临时锁定iPad/iPhone方向,iphone,objective-c,cocoa-touch,ipad,orientation,Iphone,Objective C,Cocoa Touch,Ipad,Orientation,在我的应用程序中的某一点上,我想暂时禁用旋转功能——在代码中有效地“锁定”方向,类似于iPad上的锁定切换开关在硬件中的作用 我目前正在做: [[UIDevice currentDevice] endGeneratingDeviceOrientationNotifications] 当我结束时,我会打电话: [[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications] 虽然这一切看起来都是可行的,但API文档

在我的应用程序中的某一点上,我想暂时禁用旋转功能——在代码中有效地“锁定”方向,类似于iPad上的锁定切换开关在硬件中的作用

我目前正在做:

[[UIDevice currentDevice] endGeneratingDeviceOrientationNotifications]
当我结束时,我会打电话:

[[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications]

虽然这一切看起来都是可行的,但API文档指出,应该始终有一个开始,然后是结束——而我实际上是相反的做法。是否有更合适的API来处理“锁定方向”?

我认为这很简单,就是不响应控制器的方向更改。您可以有条件地返回true或false,具体取决于所传递的参数,您不必总是返回true

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    if (rand()%2 == 0) { // evaluate if I should allow rotate
      return YES;
    } else {
      return NO;
    }
}

这就是我现在正在做的,但有一个后退:例如,如果我0。设备和视图控制器处于纵向模式。1.将设备旋转到(比方说)横向(视图控制器也旋转),2。锁定旋转。3.将设备旋转到纵向(在这种情况下,视图控制器不旋转,这很好)。4.然后解锁旋转,则UIViewController不会更新为纵向。我必须再次旋转它才能得到上面的方法:(在这种情况下,只需听加速度计的重力,并根据重力调整自己,仅供参考,还有一个真正“锁定”的私有API方法)旋转:UIWindow的BegindBilingInterfaceAutoRotation。不要使用此选项,但注意到这一点很好,因为我遇到了一个错误,Apple使用了此选项,但忘记了设置相应的EndDisableingInterfaceAutoRotation。(请参阅)