如何暂时锁定iPad/iPhone的屏幕方向

6
在我的应用程序中的某个时刻,我想临时禁用旋转功能 - 在代码中有效地“锁定”方向,类似于iPad上硬件上的锁定切换开关。
目前我正在执行以下操作:
[[UIDevice currentDevice] endGeneratingDeviceOrientationNotifications]

完成后,我会拨打电话:

[[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications]

虽然这样似乎可以工作,但API文档表明应该始终有一个begin后跟一个end,而我实际上是相反的。是否有更适合处理“锁定方向”的API?
1个回答

10

我认为问题很简单,只需要不响应来自控制器的方向变化。根据传递给你的参数有条件地返回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. 然后解锁旋转,那么视图控制器不会更新为纵向。我必须再次旋转它以调用上述方法:( - nacho4d
在这种情况下,只需听取加速度计的重力并相应地进行调整。 - slf
1
仅供参考,还有一种私有API的方式可以真正“锁定”旋转:UIWindow的beginDisablingInterfaceAutorotation。不要使用此功能,但了解此功能很好,因为我曾遇到过一个错误,其中Apple使用了此功能并忘记设置相应的endDisablingInterfaceAutorotation。(请参见https://github.com/steipete/iOS-Runtime-Headers/blob/master/Frameworks/UIKit.framework/UIWindow.h) - steipete

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接