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

时间:2010-12-18 10:56:04

标签: iphone objective-c core-text

如何从CGRect获取使用核心文字呈现的文字的NSRange

我正在使用带有NSAttributedString的核心文字。

2 个答案:

答案 0 :(得分:9)

绝对痛苦但可以做到。

您需要使用CTFrameGetLines()获取框架中的所有线条,使用CTLineGetStringRange()检查其字符范围是否在您要查找的范围内,使用CTLineGetTypographicBounds()查找线条本身会呈现多大,并使用CTLineGetOffsetForStringIndex()来确定范围的开始/结束字符的实际位置(如果该线条只是所需范围的子范围)。

结合所有这些并添加偏移和高度等,可以得到你想要的。请注意,CTLineGetImageBounds()在没有图形上下文的情况下不起作用(而且,从我收集的内容来看,无论如何它都非常昂贵)并且没有必要解决这个问题。

答案 1 :(得分:2)

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