iOS 应用程序方向旋转锁定/解锁由应用程序的配置

Posted

技术标签:

【中文标题】iOS 应用程序方向旋转锁定/解锁由应用程序的配置【英文标题】:iOS app orientation rotation lock / unlock by app's config 【发布时间】:2012-06-28 09:37:20 【问题描述】:

嗨,

我正在尝试为我的 ios 应用实现方向旋转锁定/解锁切换开关。

锁定是可以的,但解锁是个问题。

假设应用的方向和设备的方向不同。如果用户在这种情况下解锁,应用程序的方向应立即跟随设备的方向。但我找不到路。

如何模拟设备的方向旋转?

编辑

我会澄清一下情况。

应用中有一个拨动开关,启用/禁用方向旋转。

一步一步:

1。开关已启用。

2。设备旋转到纵向。

3。 UIViewController 的 shouldAutorotateToInterfaceOrientation 对每个方向都返回 YES。

4。应用旋转到 portlait。

5。用户将开关切换为禁用。

6。设备旋转为横向。

7。 UIViewController 的 shouldAutorotateToInterfaceOrientation 返回 NO 除了 portlait。

8。应用不旋转。

9。用户切换开关以启用。

10。应用程序应旋转到横向。这就是问题所在。

【问题讨论】:

等等,你如何锁定设备的方向? 通过实现 shouldAutorotateToInterfaceOrientation. 【参考方案1】:

我没有尝试过,但是有一个 viewController 方法attemptRotationToDeviceOrientation (iOS5)。可能值得一试。有趣的问题。回来报告它是否有效。

// call this method when your return value from shouldAutorotateToInterfaceOrientation: changes
// if the current interface orientation does not match the current device orientation, 
// a rotation may occur provided all relevant view controllers now return YES from shouldAutorotateToInterfaceOrientation:
+ (void)attemptRotationToDeviceOrientation __OSX_AVAILABLE_STARTING(__MAC_NA,__IPHONE_5_0);

【讨论】:

它进行旋转。但是这种方式有问题。当 UIViewController 的 didRotateFromInterfaceOrientation 被调用时,view frame size 仍然是不变的值。如果设备旋转,则值为新值。 您是否正在根据用户偏好和当前方向更改shouldAutorotateToInterfaceOrientation 返回的内容?可能需要更多的摆弄才能让它工作 - 不要放弃(还没有!;-)【参考方案2】:

在这里查看我的答案:https://***.com/a/13033443/580173

我制作了一个自定义 UINavigationController,您可以在其中检查您所在的视图,并使用正确的掩码进行响应。 (我希望根视图是纵向的)

- (BOOL)shouldAutorotate 
    return YES;


- (NSUInteger)supportedInterfaceOrientations

    if([self.viewControllers count] == 1) return UIInterfaceOrientationMaskPortrait;
    return UIInterfaceOrientationMaskPortrait | UIInterfaceOrientationMaskLandscape;

【讨论】:

【参考方案3】:

您可以阅读处理自动旋转的“技术问答 QA1688”,并在每个视图控制器中制作消息 shouldAutorotateToInterfaceOrientation: 根据您的开关设置返回正确的值。您的 info.plist 中还有一个开关。确保您在此处也有正确的设置

【讨论】:

以上是关于iOS 应用程序方向旋转锁定/解锁由应用程序的配置的主要内容,如果未能解决你的问题,请参考以下文章

显示对话框时尝试锁定屏幕旋转

在 iOS 14 中锁定屏幕方向

如何在启动应用程序时锁定方向并在导航到 Viewcontroller 时解锁它

锁定方向在 ipad ios 8 swift xcode 6.2 上不起作用

ABAP锁,数据库锁

在iPad上锁定方向并禁用旋转