在这个线程上,Core Text 计算 iOS 中的字母框架,他们能够使用 Core Text 非常精确地计算每个字形的框架。最后的矩形完美地拥抱实际绘制的字形。
使用 NSLayoutManagerboundingRectForGlyphRange:inTextContainer:
似乎并不能准确地返回字形边界框:
并且返回的矩形没有完全包含更复杂的字体(Zapfino 示例):
有谁知道如何复制上述讨论的结果而无需进入仅 iOS 7 应用程序下的 Core Text?
谢谢。
在这个线程上,Core Text 计算 iOS 中的字母框架,他们能够使用 Core Text 非常精确地计算每个字形的框架。最后的矩形完美地拥抱实际绘制的字形。
使用 NSLayoutManagerboundingRectForGlyphRange:inTextContainer:
似乎并不能准确地返回字形边界框:
并且返回的矩形没有完全包含更复杂的字体(Zapfino 示例):
有谁知道如何复制上述讨论的结果而无需进入仅 iOS 7 应用程序下的 Core Text?
谢谢。
我找到了解决此问题的方法,或者至少找到了某种解决方案
问题:boundingRectForGlyphRange
在 RTL 文本的情况下,结果关闭。
因此,如果仅检测到 RTL 文本:
使用NSLayoutManager
方法locationForGlyphAtIndex
, 用于范围内的每个字母。这些是范围内每个字形的起点。使用这些点,我正确调整了 boundingRect。
这是它的概要:
CGPoint endPoint = ((NSValue *)pointsOfGlyps.firstObject).CGPointValue;
CGPoint startPoint = ((NSValue *)pointsOfGlyps.lastObject).CGPointValue;
boundingRect.origin.x = startPoint.x;
boundingRect.size.width = endPoint.x - startPoint.x + letterWidth;
letterWidth
是字母宽度的近似值,计算为两个连续起点之间的增量。