API支持这个吗?如果没有,我该怎么办?
有CTFontCreatePathForGlyph
在 Core Text 中,它可以将单个字符转换为路径。我可以在循环中使用它来创建我的字符串作为路径,但我必须处理间距和字偶距以及所有其他令人讨厌的事情。我正在寻找一个字符串路径,如果它是在具有相同字体和大小的 UILabel 中绘制的,则该路径看起来会相同。
有一篇文章叫低级文本渲染 http://www.codeproject.com/KB/iPhone/Glyph.aspx by Ohmu http://www.codeproject.com/script/Membership/View.aspx?mid=2887692这相当广泛地涵盖了这一点。我已经尝试过这段代码并可以确认它有效。
不过,它确实使用了 Core Text,因此渲染可能与UILabel
。此外,示例文章仅涉及一行。要将其扩展到多行,您必须设置完整的核心文本系统。代替:
CTLineRef line = CTLineCreateWithAttributedString( attStr ) ;
你需要设置一个CTFramesetterRef
(CTFramesetterCreateWithAttributedString
) and CTFrameRef
(CTFramesetterCreateFrame
)如核心文本编程指南中所述。然后您可以使用以下命令获取框架中的所有线条CTFrameGetLines()
.
然后你将包裹for
示例文章中的循环:
CFArrayRef runArray = CTLineGetGlyphRuns(line);
// for each RUN
for (CFIndex runIndex = 0; runIndex < CFArrayGetCount(runArray); runIndex++)
另一个循环遍历所有行。环路的内核应该是相同的。
示例文章创建了一个图形上下文,并将单个字形的路径添加到该上下文的路径中,但您也可以轻松地创建一个CGMutablePathRef
or UIBezierPath
并将单个字形的路径添加到该对象。
在没有测试的情况下,我不是 100% 清楚的一件事是如何调整最终路径中字形的垂直位置。你可能需要打电话CTFrameGetLineOrigins()
获取每行的位置并将该位置添加到每个渲染的字形(可能在使用文本矩阵对其进行转换之后)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)