CGContextConvertRectToDeviceSpace在视网膜设备上是否正常工作?

时间:2012-05-08 08:28:36

标签: ios core-graphics core-text retina-display

我正在构建一个基于iOS的核心文本应用程序(iOS 5,iPad),并且有一个视图,我在其中执行一些排版计算(在drawRect中)。

我注意到当我使用CGContextConvertRectToDeviceSpace时,我在视网膜设备上获得的结果是非视网膜设备的两倍。我的理解是,在drawRect中,应用隐式变换应该隐藏任何视网膜/非视网膜设备的差异,所以我很困惑为什么我应该看到任何差异。

更具体地说,我正在尝试计算用户空间坐标中给定CTLine的用户坐标中的位置。我首先对我的线使用CTLineGetTypographicBounds,并使用CGContextConvertRectToDeviceSpace中的这些值来获得一个矩形...但是我回来的矩形在视网膜设备上的宽度和高度是非视网膜设备的两倍。有什么我想念的吗?

1 个答案:

答案 0 :(得分:1)

  

我注意到当我使用CGContextConvertRectToDeviceSpace时,我在视网膜设备上获得的结果是非视网膜设备的两倍。

听起来很正常。 “设备空间”表示输出设备上的实际像素,在这种情况下是视网膜显示器。它通常比CGContext的用户空间坐标系大2倍。

通常很少需要转换到设备空间或从设备空间转换 - 只有在绝对需要将绘图与真实像素对齐时才会这样做。

您希望使用CGContextConvertRectToDeviceSpace完成什么?可能有另一种选择。