我维护自2010年以来一直在iOS上运行的OpenGL应用程序。它使用全屏并隐藏状态栏。它启动时没有任何.nib文件,并创建一个OpenGL视图&控制器,反过来,显示所有应用程序内容。
我需要做哪些更改才能使用新的“安全区域”布局设计在iPhone X上运行应用程序?据推测,唯一真正的变化就是创建我的“EAGL”表面/视图,其尺寸和位置与安全区域相同,而不是整个屏幕?
答案 0 :(得分:1)
你如何尊重“全屏”应用程序中的安全区域(如大多数GL,金属等游戏)实际上是两个问题:一个是设计,另一个是实现。 (但是按照那个顺序反向处理它们会更容易,所以这里......)
如果你有一个全屏视图(例如窗口的根视图控制器),你只需将其layerClass
设置为CAEAGLLayer
(大多数OpenGL ES工作中的课程标准),你会得到一个覆盖iPhone X屏幕的整个1125 x 2436矩形的视图。 (一定要设置比例,所以你实际上得到了所有这些像素... 375 x 812 @ 1x比例可能在该屏幕上看起来很可怕。)
这可能是你想要的应用/游戏的用户体验(而且是Apple encourages)...你的3D内容一直延伸到屏幕的边缘,在底部的曲线周围,在顶部。这使得用户体验比在所有内容周围留下黑色边框要好得多。
另一方面,您的OpenGL 内容的现有设计可能会或可能不适合iPhone X的奇特形状的屏幕。如果您在顶部有任何东西,那么用户预计它会在相机/传感器/扬声器开孔后面被遮挡。同样,如果底部有任何重要的东西,它的边缘将在弯曲的角落后面切断。
在这种情况下,您需要全屏显示全屏内容的不重要部分(如游戏的3D游戏世界视图),但要插入任何重要内容,如UI叠加或交互式3D元素。至于你如何做到这一点,有几种可行的方法,需要权衡:
对iPhone X障碍物尺寸进行硬编码,检测您何时在iPhone X上运行,并相应地修复您的布局。这很简单,但并不健全。如果Apple决定改变屏幕边缘的软件UI元素(如滑动到主页指示灯)的工作方式,或明年iPhone XI(或X2?或XX?)的形状略有不同,那么你需要再次更新以适应。
即使您没有使用UIKit或自动布局绘制/定位屏幕内容,也请使用安全区域指南。询问视图的safeAreaLayoutGuide
并将该指南的边界转换为用于定位使用OpenGL绘制的内容的任何坐标系。这是一个更多的工作,但它确保您的应用程序已准备好迎接Apple未来投掷的任何曲线球。
它使用全屏并隐藏状态栏。
在为iPhone X设计时,值得重新思考“全屏”应用是否应该隐藏状态栏。在其他iOS设备上,显示状态栏意味着从应用内容中删除有用空间。但是在iPhone X上,大多数应用程序没有任何有用的功能,无论如何都可以使用这些“恶魔之角”角落 - 您的用户可能会欣赏仍能看到时钟,电池等。