gpt4 book ai didi

iphone - 使用 NSLayoutManager 计算每个字形的帧

转载 作者:行者123 更新时间:2023-12-03 18:25:14 38 4
gpt4 key购买 nike

在此线程中,Core Text calculate letter frame in iOS ,他们能够使用 Core Text 非常精确地计算每个字形的框架。最终的矩形完美地拥抱了实际绘制的字形。

使用 NSLayoutManager 的 boundingRectForGlyphRange:inTextContainer: 似乎没有返回精确的字形边界框:

glyph frames using boundingRectForGlyphRange:inTextContainer

返回的矩形没有完全包含更复杂的字体(Zapfino 示例):

Zapfino f glyph using boundingRectForGlyphRange:inTextContainer

有谁知道如何复制上述讨论的结果,而无需在仅限 iOS 7 的应用程序下进入 Core Text?

谢谢。

最佳答案

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

问题:对于 RTL 文本,boundingRectForGlyphRange 结果关闭。

因此,如果仅检测到 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 是字母宽度的近似值,计算为两个连续起点之间的增量。

关于iphone - 使用 NSLayoutManager 计算每个字形的帧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21764316/

38 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com