【发布时间】:2010-10-29 03:31:45
【问题描述】:
在我问问题之前,这是来自 Apple 的文档:如何使用 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 中吗?
【问题讨论】:
-
Core Text 现已在 iOS 4 中发布。然而,pgb 回答的方法是最简单的。
标签: ios objective-c quartz-graphics core-text