• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

ios - 如何在 iOS 中创建多行字符串或多行标签作为 CGPath?

[复制链接]
菜鸟教程小白 发表于 2022-12-12 17:41:05 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

API 支持这个吗?如果没有,我该怎么做?

Core Text中有CTFontCreatePathForGlyph,可以将单个字符翻译成路径。我可以在循环中使用它来创建我的字符串作为路径,但我必须处理间距和字距调整以及所有其他讨厌的事情。我正在寻找一个字符串路径,如果它是在具有相同字体和大小的 UILabel 中绘制的,则看起来相同。



Best Answer-推荐答案


有一篇文章叫Low-level text rendering通过 Ohmu这涵盖了相当广泛的内容。我已经尝试过这段代码,并且可以确认它有效。

不过,它确实使用了 Core Text,因此渲染可能与 UILabel 的渲染不完全一样。此外,示例文章仅处理一行。要将其扩展到多行,您必须设置完整的核心文本系统。而不是:

CTLineRef line = CTLineCreateWithAttributedString( attStr ) ;

您需要设置 CTFramesetterRef (CTFramesetterCreateWithAttributedString) 和 CTFrameRef (CTFramesetterCreateFrame)核心文本编程指南。然后,您可以使用 CTFrameGetLines() 获取框架中的所有行。

然后您将在示例文章中包装 for 循环:

CFArrayRef runArray = CTLineGetGlyphRuns(line);

// for each RUN
for (CFIndex runIndex = 0; runIndex < CFArrayGetCount(runArray); runIndex++)

使用另一个循环遍历所有行。循环的内核应该是相同的。

示例文章创建了一个图形上下文并将单个字形的路径添加到此上下文的路径中,但您也可以轻松创建 CGMutablePathRefUIBezierPath 并添加单个字形到该对象的路径。

在没有测试的情况下,我并不是 100% 清楚这一点,那就是如何调整最终路径中字形的垂直位置。您可能必须调用 CTFrameGetLineOrigins() 来获取每行的位置并将该位置添加到每个渲染的字形(可能在使用文本矩阵对其进行转换之后)。

关于ios - 如何在 iOS 中创建多行字符串或多行标签作为 CGPath?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7573383/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap