我们如何测量 Cocoa 中文本的可见边界?

Posted

技术标签:

【中文标题】我们如何测量 Cocoa 中文本的可见边界?【英文标题】:How do we measure visible bounds of text in Cocoa? 【发布时间】:2012-07-30 18:12:52 【问题描述】:

下面列出的方法都没有给出 Cocoa 中文本的确切可见边界。我们如何获得它?

NSString's boundingRectWithSize:options:attributes: NSAttributedString's boundingRectWithSize:options: NSLayoutManager's usedRectForTextContainer:

为了说明这一点,here's a screenshot使用上面第二种方法的结果如this sample code snippet所示。

【问题讨论】:

【参考方案1】:

其实从排版上看,方框是对的,但字体超出了自己的界限。您可以尝试选项NSStringDrawingUsesDeviceMetrics,它使用字形边界而不是印刷边界。

【讨论】:

谢谢。但是,NSStringDrawingUsesDeviceMetrics 运气不好。得到相同的输出。我不太确定这个界限有什么用。也许它旨在用于查找在四个侧面中的任何一个上绘制相邻文本的位置。但在我的情况下,我想要确切的可见边界,但我无法找到获得它的单一方法。希望这是可能的。还有什么想法吗? 从标志的描述来看,它看起来正是我正在寻找的东西,但我只是测试了标志是否对我系统上的任何字体有影响,结果证明它与NSStringDrawingUsesLineFragmentOrigin 一起包含或省略都没有区别。会不会是 Cocoa 中的错误?!【参考方案2】:

这是我编写的解决方案。欢迎提出任何改进建议。 代码 sn-p:http://pastebin.com/qJMKwvau 截图:http://ScrnSht.com/jskyqs

【讨论】:

以上是关于我们如何测量 Cocoa 中文本的可见边界?的主要内容,如果未能解决你的问题,请参考以下文章

VBA中重叠的对象 - 文本框架不可见

如何在地理坐标中获取 WorldWind 地球的边界

是否有一种简单的方法来确定控件的可见边界以优化渲染?

从深度图中提取物体边界

获取可见的传单地图的边界框?

在 JavaScript 中测量文本大小