在深入我的下一个项目之前,我正在寻找建议。 我想支持iOS现在支持的所有各种分辨率(视网膜,非视网膜iPhone和所有3 iPad(。
开发人员完成此操作的最常见方式是什么? 我见过类似的问题,但性质具体。 我正在寻找完整的软件包。 即。 我想支持不同分辨率的位图字体、图像等。
设备特定的开关,还是 if 语句标准?
提前感谢您的所有帮助。
E
编辑:我从苹果公司找到了这个:
块引用 如果应用程序使用 OpenGL ES 进行渲染,则现有绘图代码应继续工作,无需进行任何更改。但是,在高分辨率屏幕上绘制时,您的内容会相应地缩放,并且看起来会更加块状。块状外观的原因是 CAEAGLLayer 类的默认行为(用于支持 OpenGL ES 渲染缓冲区(与其他核心动画层对象相同。换句话说,其比例因子最初设置为 1.0,这会导致核心动画合成器在高分辨率屏幕上缩放图层的内容。为了避免这种块状外观,您需要增加 OpenGL ES 渲染缓冲区的大小以匹配屏幕的大小。(使用更多像素,您可以增加为内容提供的细节量。但是,由于向渲染缓冲区添加更多像素会影响性能,因此必须明确选择支持高分辨率屏幕。
块引用 要启用高分辨率绘图,必须更改用于显示 OpenGL ES 内容的视图的比例因子。将视图的 contentScaleFactor 属性从 1.0 更改为 2.0 会触发对基础 CAEAGLLayer 对象的比例因子的匹配更改。渲染缓冲区存储: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);
谢谢你的外观。 我希望这对某人有所帮助。
请参阅视图编程指南:视图几何图形和坐标系
http://developer.apple.com/library/ios/#DOCUMENTATION/WindowsViews/Conceptual/ViewPG_iPhoneOS/WindowsandViews/WindowsandViews.html
坐标值使用浮点数表示,浮点数 允许内容的精确布局和定位,无论 底层屏幕分辨率
这意味着您指定的点(GCRect等(不是像素 - 而是针对视网膜/非视网膜进行调整的点
最后,正如Cocoa Priest所指出的,您可以维护png图像和*@2x.png版本的图像:
iPhone 上的视网膜显示图像
Retina 显示应用程序的@2x有什么意义?
另外,这里有一篇关于视网膜设计的文章:http://globalmoxie.com/blog/designing-for-iphone4-retina-display.shtml
只需要在捆绑包中拥有@2x版本的图像即可。 如果iOS在视网膜硬件上运行,则会自动采用@2x版本