显示模态视图控制器时设备旋转
Posted
技术标签:
【中文标题】显示模态视图控制器时设备旋转【英文标题】:Device rotation while displaying modal view controller 【发布时间】:2011-10-25 02:03:43 【问题描述】:我有一个支持动态设备方向的 OpenGL 应用程序。我可以将设备旋转到 4 个物理方向中的任何一个,一切正常。
现在我添加了一个模态视图控制器,以便您可以获得设置视图(这是非 OpenGL)。模态视图控制器还支持任何设备方向。
但是,如果我在方向 A(例如纵向)中显示模态视图控制器并在方向 B(例如横向-右)中将其关闭,则在它被关闭后,OpenGL 视图已损坏(纵横比看起来错误)。我必须将设备定向到不同的方向,以便 OpenGL 视图自行“纠正”。
当模态视图控制器被关闭时,就像应用认为它已经在方向 B,所以它永远不会旋转 OpenGL 视图。
如果我在模态视图控制器上禁用旋转,那么如果我在方向 A 中显示模态控制器,将设备旋转到方向 B(模态视图控制器不再旋转)并关闭控制器,OpenGL 视图将获得 willRotateToInterfaceOrientation/ didRotateFromInterfaceOrientation 并正确定向到方向 B。
有什么方法可以保持模态控制器的动态方向,但在模态控制器关闭后,OpenGL 视图也能正确旋转吗?
谢谢。
【问题讨论】:
您使用哪种机制来检测旋转变化以更新您的 OpenGL 视图?是什么管理可能调整其框架的 OpenGL 视图的呈现? shouldAutorotateToInterfaceOrientation 用于 OpenGL 视图控制器返回 YES。 willRotateToInterfaceOrientation 在 OpenGL 视图控制器上被调用。 layoutSubviews 在 OpenGL 视图上调用,释放 OpenGL 缓冲区。下次调用渲染函数时,OpenGL 缓冲区会以交换的宽度/高度重新创建。 当模态框固定为纵向时,您是如何使其工作的?我也有同样的问题 【参考方案1】:我在自定义操作表中遇到了类似的问题,并决定最简单的答案是在显示视图时暂时禁止旋转。您可以在 Apple Notes 应用程序中看到这样的示例,每当显示操作表时,方向就会被锁定。
我知道您已经尝试过这个并且它有效,我只是认为您应该将其视为一个有效的解决方案。
我不知道如何解决它,您可能需要将任何方向更改存储在模态视图控制器中,并将它们同时或一次传递回 OpenGL 视图控制器关闭设置视图,然后手动重新渲染。
【讨论】:
以上是关于显示模态视图控制器时设备旋转的主要内容,如果未能解决你的问题,请参考以下文章