5

在尝试为新的 iPad Retina 显示屏更新我的应用程序时,我刚刚注意到一件有趣的事情,Interface Builder 中的每个坐标仍然基于原始的 1024x768 分辨率。

我的意思是,如果我有一个 2048x1536 的图像让它适合显示器上的整个屏幕,我需要将它的大小设置为 1024x768 而不是 2048x1536。

我只是好奇这是故意的吗?我可以将 Interface Builder 中的坐标系切换为特定于 Retina 吗?这有点烦人,因为我的一些图形在宽度或高度上都不是原始图形的 2 倍。我似乎无法在 Interface Builder 中设置 1/2 坐标数,例如 1.5,它可以是 1 或 2。

此时我是否应该只在代码中进行界面设计而忘记界面构建器?让我的图形在两个方向上都精确 2 倍?还是只是忍受它?

4

2 回答 2

4

iOS 上的界面基于点,而不是像素。图像必须是原件大小的 2 倍。

点与像素 在 iOS 中,您在绘图代码中指定的坐标与底层设备的像素是有区别的。当使用 Quartz、UIKit 和 Core Animation 等原生绘图技术时,您可以使用逻辑坐标空间指定坐标值,该空间以点为单位测量距离。该逻辑坐标系与系统框架用来管理屏幕像素的设备坐标空间分离。系统自动将逻辑坐标空间中的点映射到设备坐标空间中的像素,但这种映射并不总是一对一的。这种行为导致了一个重要的事实,你应该永远记住:

一点不一定对应屏幕上的一个像素。使用点(和逻辑坐标系)的目的是提供与设备无关的一致大小的输出。点的实际大小无关紧要。点的目标是提供一个相对一致的比例,您可以在代码中使用它来指定视图和渲染内容的大小和位置。点如何实际映射到像素是系统框架处理的一个细节。例如,在具有高分辨率屏幕的设备上,一个点宽的线条实际上可能会在屏幕上产生一个两个像素宽的线条。结果是,如果你在两个相似的设备上绘制相同的内容,其中只有一个具有高分辨率屏幕,

在您自己的绘图代码中,您大部分时间都使用点,但有时您可能需要知道点如何映射到像素。例如,在高分辨率屏幕上,您可能希望使用额外的像素在内容中提供额外的细节,或者您可能只想以微妙的方式调整内容的位置或大小。在 iOS 4 和更高版本中,UIScreen、UIView、UIImage 和 CALayer 类公开了一个比例因子,告诉您该特定对象的点和像素之间的关系。在 iOS 4 之前,这个比例因子被假定为 1.0,但在 iOS 4 及更高版本中,它可能是 1.0 或 2.0,具体取决于底层设备的分辨率。将来,其他比例因子也可能是可能的。

来自http://developer.apple.com/library/ios/#documentation/2DDrawing/Conceptual/DrawingPrintingiOS/GraphicsDrawingOverview/GraphicsDrawingOverview.html

于 2012-04-09T20:32:54.150 回答
1

这是 Apple 有意为之,使您的代码在定位控件和文本时相对独立于实际屏幕分辨率。但是,正如您所指出的,它会使以设备的最大分辨率显示图形变得有点复杂。

对于 iPhone,屏幕始终为 480 x 320 点。对于 iPad,它是 1024 x 768。如果您的图形针对设备进行了适当的缩放,那么在代码中处理这种影响并不难。我不是平面设计师,事实证明,我必须提供多组图标、启动图像等来解决高分辨率问题,这对我来说有点挑战。

Apple 为某些图像类型制定了命名标准,以最大限度地减少对代码的影响:

https://developer.apple.com/library/ios/#DOCUMENTATION/UserExperience/Conceptual/MobileHIG/IconsImages/IconsImages.html

但是,当您处理内联自定义图形时,这对您没有帮助。

于 2012-04-09T20:33:47.750 回答