核心文本 - 从 NSRange 获取像素坐标

发布于 2024-10-08 09:35:19 字数 137 浏览 3 评论 0原文

如何从 NSRange 获取使用 Core Text 渲染的文本的 CGRect

我正在将 Core Text 与 NSAttributedString 一起使用。

How would I get a CGRect from an NSRange for text rendered with Core Text?

I am using Core Text with an NSAttributedString.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

似狗非友 2024-10-15 09:35:20

首先确定您感兴趣的范围所在的行。然后调用 CTLineGetOffsetForStringIndex() 获取特定字符串位置距行首的偏移量。与 CTLineGetImageBounds() 一起,应该可以计算范围内第一个和最后一个字符的 CGPoint 位置。

FIrst determine the line(s) in which the range you are interested in lies is. Then call CTLineGetOffsetForStringIndex() to get an offset of a specific string position from the start of the line. Together with CTLineGetImageBounds(), it should be possible to calculate a CGPoint position of the first and last characters in your range.

带刺的爱情 2024-10-15 09:35:19

这是绝对的痛苦,但可以做到。

您需要使用 CTFrameGetLines() 获取框架中的所有行,使用 CTLineGetStringRange() 检查它们的字符范围是否在您要查找的范围内,使用CTLineGetTypgraphicBounds() 查找线条本身渲染的大小,并使用 CTLineGetOffsetForStringIndex() 确定范围开始/结束字符的实际位置(如果线只是所需范围的子范围)。

将所有这些结合起来并添加偏移量和高度等可以得到您想要的东西。请注意,如果没有图形上下文,CTLineGetImageBounds() 就无法工作(而且,据我所知,它的成本相当昂贵),并且没有必要解决此问题。

It is an absolute pain but can be done.

You need to get all of the lines in the frame using CTFrameGetLines(), check if their character range is in the range you're looking for using CTLineGetStringRange(), use CTLineGetTypographicBounds() to find how big the line itself would render as, and use CTLineGetOffsetForStringIndex() to determine the actual position of the start/end character of the range (if the line is just a subrange of the desired range).

Combining all of this and adding up offsets and heights and such can get you what you want. Note that CTLineGetImageBounds() doesn't work without a graphics context (and, from what I gather, it is pretty expensive anyway) and is not necessary to solve this problem.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文