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 应用程序方向旋转锁定/解锁由应用程序的配置的主要内容,如果未能解决你的问题,请参考以下文章
如何在启动应用程序时锁定方向并在导航到 Viewcontroller 时解锁它