在深入研究下一个项目之前,我正在寻求建议。我想支持 iOS 现在支持的所有各种分辨率(视网膜、非视网膜 iPhone 和所有 3 个 iPad)。
开发人员完成这项工作的最常见方式是什么?我看到过类似的问题,但具有特定的性质。我正在寻找完整的包裹。IE。我想支持不同分辨率的位图字体、图像等。
设备特定的开关或 if 语句是标准的吗?
感谢所有高级帮助。
乙
编辑:我从 Apple 找到了这个:
Blockquote 如果您的应用程序使用 OpenGL ES 进行渲染,您现有的绘图代码应该继续工作而无需任何更改。但是,当在高分辨率屏幕上绘制时,您的内容会相应地缩放,并且会显得更加块状。出现块状外观的原因是用于支持 OpenGL ES 渲染缓冲区的 CAEAGLLayer 类的默认行为与其他核心动画层对象相同。换句话说,它的缩放因子最初设置为 1.0,这会导致 Core Animation 合成器在高分辨率屏幕上缩放图层的内容。为避免出现这种块状外观,您需要增加 OpenGL ES 渲染缓冲区的大小以匹配屏幕大小。(使用更多像素,您可以增加为内容提供的详细信息量。
Blockquote 要启用高分辨率绘图,您必须更改用于呈现 OpenGL ES 内容的视图的比例因子。将视图的 contentScaleFactor 属性从 1.0 更改为 2.0 会触发对基础 CAEAGLLayer 对象的比例因子的匹配更改。用于将图层对象绑定到渲染缓冲区的 renderbufferStorage:fromDrawable: 方法通过将图层的边界乘以其比例因子来计算渲染缓冲区的大小。因此,将比例因子加倍会使生成的渲染缓冲区的宽度和高度加倍,从而为您的内容提供更多像素。之后,您可以为这些额外的像素提供内容。
所以我想我更新的问题是如何将上述比例因子加倍?
编辑2:
我快到了...
我正在使用它在我的 EAGLView 中进行缩放:
// Adjust for retina displays
if ([self respondsToSelector:@selector(setContentScaleFactor:)])
{
self.contentScaleFactor = [[UIScreen mainScreen] scale];
}
现在唯一剩下的问题是起源不知何故搞砸了。显示图像现在根据分辨率缩放,但在较大的分辨率下,图像从屏幕中间开始。
请帮忙!
编辑3:解决了!!!!我在方向上遇到了问题。
您需要确保您的翻译已更新。我用这个:
glTranslatef( width / 2, height /2, 0);
glRotatef(-90, 0, 0, 1);
glTranslatef(-1 * (height / 2),-1 * (width / 2),0);
谢谢你的样子。我希望这可以帮助别人。