- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这是 Twitter 应用程序的屏幕截图供引用:http://screencast.com/t/YmFmYmI4M
我想要做的是将 float 弹出窗口放置在可以跨越多行的 NSAttributedString 中的子字符串顶部。 NSAttributedString 是该项目的要求。
在提供的屏幕截图中,您可以看到链接是背景突出显示的,因此这让我相信它们正在使用 CoreText 和 NSAttributedStrings。我还发现了一个名为 CTRunRef ( 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);
现在您必须在框架中寻找相关的文本 block 。使用 CTFrameGetLines()
获取 CTLineRef
数组。
迭代数组,通过检查触摸是否位于 CTLineGetImageBounds()
返回的矩形内来测试触摸是否在该行上。如果是,现在查看该行中的字形。
同样,您可以使用 CTLineGetGlyphRuns()
获取 CTRunRef
数组。使用 CTRunGetImageBounds()
检查点击是否在字形运行内,如果是,您可以使用 CTRunGetStringIndices() 找到字形运行对应的原始属性字符串中的索引范围)
。
关于iPhone 核心文本 : Find the pixel coordinates of a substring,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3796148/
我是一名优秀的程序员,十分优秀!