在深入了解下一个项目之前,我正在寻找建议。我想支持iOS现在支持的所有各种分辨率(视网膜,非视网膜iPhone和所有3个iPad)。
开发人员完成此任务的最常见方式是什么?我已经看到了类似问题,但具体问题。我正在寻找完整的包裹。 IE浏览器。我想支持不同分辨率的位图字体,图像等。
是设备特定的开关,还是if语句标准?
感谢先进的所有帮助。
电子
编辑:我在Apple发现了这个:
块引用 如果您的应用程序使用OpenGL ES进行渲染,则现有的绘图代码应该继续工作而不进行任何更改。但是,在高分辨率屏幕上绘制时,您的内容会相应缩放,并且会显得更加模糊。块状外观的原因是CAEAGLLayer类的默认行为(用于支持OpenGL ES渲染缓冲区)与其他Core Animation层对象相同。换句话说,它的比例因子最初设置为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);
感谢你的外表。我希望这有助于某人。
答案 0 :(得分:2)
请参阅视图编程指南:查看几何和坐标系
坐标值使用浮点数表示,其中 允许精确布局和定位内容,无论如何 基础屏幕分辨率
这意味着您指定的点(GCRect等...)不是像素 - 它是针对视网膜/非视网膜调整的点
最后,正如Cocoa Priest所说,你可以保留png图像和*@2x.png版本的图像:
Retina Display Images on iPhone
What is the point of the @2x for Retina display apps?
另外,这里有一篇关于视网膜设计的文章: http://globalmoxie.com/blog/designing-for-iphone4-retina-display.shtml
答案 1 :(得分:-2)
你只需要在你的包中拥有@ 2x版本的图像。如果在视网膜硬件上运行,iOS会自动获取@ 2x版本