我正在基于 xcode Utility App 模板创建一个简单的实用程序应用程序。我想将 FlipsideViewController 方向限制为仅在调用 FlipsideViewController 时设备所处的方向。最简单的方法是什么?我已经尝试过几种不同的方法,但到目前为止,它们都失败了。谢谢...
1 回答
首先,获取当前方向:
- (void) viewDidAppear: (BOOL) animated
{
eLockOrient = self.interfaceOrientation;
}
然后,禁止其他任何事情:
- (BOOL) shouldAutorotateToInterfaceOrientation: (UIInterfaceOrientation) interfaceOrientation
{
if (eLockOrient == 0)
return true;
return (interfaceOrientation == eLockOrient);
}
ADD:我做了一些更多的测试,模拟器和设备在启动方向方面存在显着的行为差异。设备似乎运行正常,但模拟器却没有。看来,如果您将模拟器置于横向模式,则当应用程序启动时,模拟器不会记得发送应用程序消息来告诉应用程序它需要旋转。模拟器没有意识到它是在风景中。下面是来自 sim 和 device 的痕迹。
设备:
[TiAeManageSearchesVC.shouldAutorotate] intfOrient=1 [TiAeManageSearchesVC.shouldAutorotate] intfOrient=1 [TiAeManageSearchesVC.shouldAutorotate] intfOrient=1 [TiAeManageSearchesVC.shouldAutorotate] intfOrient=4 [TiAeManageSearchesVC.shouldAutorotate] intfOrient=4 [TiAeManageSearchesVC.shouldAutorotate]
模拟器:
[TiAeManageSearchesVC.shouldAutorotate] intfOrient=1 [TiAeManageSearchesVC.shouldAutorotate] intfOrient=1 [TiAeManageSearchesVC.shouldAutorotate] intfOrient=1 [TiAeManageSearchesVC.viewDidAppear] self.intfOrient=1
因此,上面的代码将在记录日志消息的情况下工作。我正在添加以下几行来改进物理设备上的解决方案。这将消除日志中的错误消息。
if (eLockOrient == 0)
return true;
否则,我认为问题出在模拟器上。如果您在模拟器上加载应用程序时尝试针对第一个视图进行测试,您将遇到这些问题。我已经测试了后续视图,如果您执行以下操作,它们可以正常工作:
- 启动应用程序。
- 旋转模拟器。
- 进入第二个视图。