这是 Twitter 应用程序的屏幕截图供参考:http://screencast.com/t/YmFmYmI4M http://screencast.com/t/YmFmYmI4M
我想要做的是将浮动弹出窗口放置在可以跨越多行的 NSAttributedString 中的子字符串顶部。 NSAttributedString 是该项目的要求。
在提供的屏幕截图中,您可以看到链接是背景突出显示的,因此这让我相信它们正在使用 CoreText 和 NSAttributedString。我还发现了一个叫做 CTRunRef 的东西(http://developer.apple.com/library/ios/#documentation/Carbon/Reference/CTRunRef/Reference/reference.html http://developer.apple.com/library/ios/#documentation/Carbon/Reference/CTRunRef/Reference/reference.html)看起来很有希望,但我在概念上无法将它们组合在一起。
简而言之,如果我在核心文本中有一个段落,当我点击一个单词时,如何找到该单词的边界框?
在属性字符串中设置一些属性,该属性不会影响显示,但会导致其布局为单独的字形运行,然后使用 CoreText 布局字符串
CTFramesetterRef framesetter = CTFramesetterCreateWithAttributedString(attrString);
CTFrameRef ctframe = CTFramesetterCreateFrame(framesetter, CFRangeMake(0, 0), path, NULL);
现在,您必须在框架中寻找相关的文本块。获取数组CTLineRef
s with CTFrameGetLines()
.
迭代数组,通过检查触摸是否位于该行返回的矩形内来测试触摸是否在该行上CTLineGetImageBounds()
。如果是,现在查看该行中的字形。
同样,你可以获得一个数组CTRunRef
s with CTLineGetGlyphRuns()
。检查水龙头是否在字形运行内CTRunGetImageBounds()
,如果是的话,您可以在字形运行对应的原始属性字符串中找到索引范围CTRunGetStringIndices()
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)