【发布时间】:2012-05-02 00:02:50
【问题描述】:
在深入研究下一个项目之前,我正在寻求建议。我想支持 iOS 现在支持的所有各种分辨率(视网膜、非视网膜 iPhone 和所有 3 个 iPad)。
开发人员完成这项工作的最常见方式是什么?我看到过类似的问题,但具有特定的性质。我正在寻找完整的包裹。 IE。我想支持不同分辨率的位图字体、图片等。
设备特定的开关或 if 语句是标准的吗?
感谢所有高级帮助。
E
编辑:我从 Apple 找到了这个:
块引用 如果您的应用程序使用 OpenGL ES 进行渲染,您现有的绘图代码应该继续工作而无需任何更改。但是,当在高分辨率屏幕上绘制时,您的内容会相应地缩放,并且会显得更加块状。出现块状外观的原因是用于支持 OpenGL ES 渲染缓冲区的 CAEAGLLayer 类的默认行为与其他核心动画层对象相同。换句话说,它的缩放因子最初设置为 1.0,这会导致 Core Animation 合成器在高分辨率屏幕上缩放图层的内容。为避免出现这种块状外观,您需要增加 OpenGL ES 渲染缓冲区的大小以匹配屏幕大小。 (使用更多像素,您可以增加为内容提供的详细信息量。)但是,由于向渲染缓冲区添加更多像素会影响性能,因此您必须明确选择支持高分辨率屏幕。
块引用 要启用高分辨率绘图,您必须更改用于呈现 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);
感谢您的关注。我希望这对某人有所帮助。
【问题讨论】:
-
在 iPad3 上设置 contentScale = 2 以获得视网膜支持有什么好处吗? stackoverflow.com/questions/11276027/…
-
我还没有尝试过 iPad 的视网膜显示器。当我这样做时,我会再次触摸。
标签: ios cocoa-touch opengl-es retina-display