【问题标题】:Cocoa controls text location?Cocoa 控制文本位置?
【发布时间】:2010-11-12 03:17:56
【问题描述】:

这是否可以获得在标准(非自定义)Cocoa 控件中绘制的文本的坐标?实际上,我需要文本的基线,即 y 轴偏移值(相对于视图框架矩形的 y 原点)。 这就是接口构建器在选择窗格中显示的是选择窗格 - >显示选择布局矩形时。

【问题讨论】:

    标签: cocoa baseline


    【解决方案1】:

    很遗憾,没有一种解决方案适用于所有控件和单元格。您应该能够使用以下方法获得此信息的良好近似值:

    -[NSCell titleRectForBounds:]
    -[NSCell font]
    -[NSFont ascender]
    

    这里有一些适用于 NSButton/NSButtonCell 的代码

    NSRect titleRect = [[button cell] titleRectForBounds:[button bounds]];
    CGFloat baseline = ceil(NSMinY(titleRect) + [[[button cell] font] ascender]);
    

    此时,基线位于按钮的(边界)坐标空间中。您可能希望使用 -[NSView convertPoint:toView:];

    将其转换为其他空间

    此外,其中的“天花板”是一个近似值。并非所有控件都会这样做。有些可能会取整,或使用其他一些舍入函数。或者他们可能会以完全不同的方式布局他们的标题,而这种近似是行不通的。

    【讨论】:

    • 这可能是一个真正的痛苦。在 Adob​​e Lightroom 中,我们有自己的控件布局系统。一个真正有利于验证文本基线绘制位置的工具是通过使用poseAs添加一些调试代码:并插入一些全局绘图代码以覆盖正常绘图。本质上,我们可以在调试版本中打开它,以显示基线在我们关心的所有控件上的位置。如果你做了很多这样的事情,它最终可以节省你的时间。由于专有性质,我不能分享任何代码,抱歉。
    • poseAs: 在 Leopard 中已弃用;)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-14
    • 2022-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多