iPad Retina显示屏的XCode坐标

时间:2012-04-09 19:14:27

标签: objective-c ios xcode interface-builder

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

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

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

此时我是否应该在代码中进行界面设计并忘记界面构建器?在两个方向上保持我的图形正好2倍?或者只是和它一起生活?

2 个答案:

答案 0 :(得分:4)

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

  
    

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

  
     

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

     

在您自己的绘图代码中,您大部分时间都使用积分,但在那里   您可能需要知道点如何映射到像素。   例如,在高分辨率屏幕上,您可能想要使用   额外的像素可以在您的内容中提供额外的细节,或者您可以   只是想以微妙的方式调整内容的位置或大小。   在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

答案 1 :(得分:1)

Apple的目的是让您的代码在定位控件和文本时相对独立于实际的屏幕分辨率。但是,正如您所指出的,它可以使设备的最大分辨率显示更复杂。

对于iPhone,屏幕总是480 x 320点。对于iPad,它是1024 x 768.如果您的图形适合设备缩放,那么在代码中处理的影响并不难。我不是一名平面设计师,我必须提供多套图标,启动图像等来解释高分辨率,这对我来说有点挑战。

Apple为某些图像类型设定了标准,以尽量减少对代码的影响:

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

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