在我提出问题之前,这是来自 Apple 的文档 re:how to determine the width of a string of using Quartz:
如果文本测量对您的应用很重要,则可以使用 Quartz 2D 函数来计算它们。但是,您可能首先考虑使用 ATSUI,它的优势在于文本布局和测量。ATSUI 有几个获取文本度量的函数。您不仅可以获得布局后文本指标,而且在极少数需要它们的情况下,您可以获得布局前文本指标。与您必须自己执行计算的 Quartz 不同,ATSUI 会为您计算测量值。例如,您可以通过调用 ATSUI 函数 ATSUMeasureTextImage 来获取文本的图像边界矩形。
如果您认为 Quartz 文本比 ATSUI(或 Cocoa)更适合您的需求,您可以按照以下步骤在 Quartz 绘制文本之前测量文本的宽度:
- 调用函数 CGContextGetTextPosition 获取当前文本位置。
- 使用函数 CGContextSetTextDrawingMode 将文本绘制模式设置为 kCGTextInvisible。
- 通过调用函数CGContextShowText来绘制文本,在当前文本位置绘制文本。
- 通过调用函数 CGContextGetTextPosition 确定最终文本位置。
- 从结束位置减去开始位置以确定文本的宽度。
以下是我的问题:
这真的是使用 Core Graphics 确定字符串宽度的最佳方法吗?它看起来很脆弱,因为我的文本与 2D 图形元素共存,所以我想对所有渲染使用相同的上下文。我希望会有一些紧凑的方法,比如:
CGContextGetTextWidthAndHeight(context, text);
我读到 ATSUI 已经过时,将被 Core Text 取代。这是真的吗?如果是这样,是在 iOS 中吗?