7

在深入研究下一个项目之前,我正在寻求建议。我想支持 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);

谢谢你的样子。我希望这可以帮助别人。

4

2 回答 2

2

请参阅视图编程指南:查看几何和坐标系

http://developer.apple.com/library/ios/#DOCUMENTATION/WindowsViews/Conceptual/ViewPG_iPhoneOS/WindowsandViews/WindowsandViews.html

坐标值使用浮点数表示,无论底层屏幕分辨率如何,都可以精确布局和定位内容

这意味着您指定的点(GCRect 等...)不是像素 - 它是针对视网膜/非视网膜调整的点

最后,正如 Cocoa Priest 所指出的,您可以维护 png 图像和图像的 *@2x.png 版本:

iPhone 上的 Retina 显示图像

@2x for Retina 显示应用的意义何在?

另外,这里有一篇关于视网膜设计的文章:http: //globalmoxie.com/blog/designing-for-iphone4-retina-display.shtml

于 2012-05-02T00:44:56.683 回答
-2

你只需要在你的包中有@2x-versions 的图像。如果 iOS 在 Retina 硬件上运行,它会自动采用 @2x-version

于 2012-05-02T00:09:43.960 回答