Iphone 使用NSLayoutManager计算每个图示符的帧

Iphone 使用NSLayoutManager计算每个图示符的帧,iphone,ipad,ios7,glyph,nslayoutmanager,Iphone,Ipad,Ios7,Glyph,Nslayoutmanager,在这个线程中,他们能够使用核心文本非常精确地计算每个字形的帧。最后的矩形完美地拥抱了实际绘制的图示符 使用NSLayoutManager的boundingrectfolyprange:inTextContainer:似乎不会返回精确如下的glyph边界框: 并且返回的矩形不会完全包含更复杂的字体(Zapfino示例): 是否有人知道如何复制上述讨论的结果,而不必进入仅iOS 7应用程序的核心文本 谢谢。我已经找到了这个问题的解决方案,或者至少是某种解决方案 问题:boundingrectfo

在这个线程中,他们能够使用核心文本非常精确地计算每个字形的帧。最后的矩形完美地拥抱了实际绘制的图示符

使用NSLayoutManager的
boundingrectfolyprange:inTextContainer:
似乎不会返回精确如下的glyph边界框:

并且返回的矩形不会完全包含更复杂的字体(Zapfino示例):

是否有人知道如何复制上述讨论的结果,而不必进入仅iOS 7应用程序的核心文本


谢谢。

我已经找到了这个问题的解决方案,或者至少是某种解决方案

问题:
boundingrectforglyprange
results在使用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
是字母宽度的近似值,计算为两个连续起点之间的增量。

字体就是这样设计的。对于SnellRoundhand字体或任何其他斜体/斜体字体,您得到了什么结果?