在这个线程上,Core Text 在 iOS 中计算字母框架 https://stackoverflow.com/questions/21443625/core-text-calculate-letter-frame-in-ios,他们能够使用 Core Text 非常精确地计算每个字形的框架。最终的矩形完美地拥抱了实际绘制的字形。
使用 NSLayoutManagerboundingRectForGlyphRange:inTextContainer:
似乎没有准确地返回字形边界框:
并且返回的矩形没有完全包含更复杂的字体(Zapfino 示例):
有谁知道如何复制上述讨论的结果,而无需在仅限 iOS 7 的应用程序下进入 Core Text?
Thanks.
我已经找到了这个问题的解决方案,或者至少是某种解决方案
问题:boundingRectForGlyphRange
如果是 RTL 文本,结果会关闭。
因此,如果仅检测到 RTL 文本:
Using NSLayoutManager
method 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
是字母宽度的近似值,计算为两个连续起点之间的增量。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)