在我提出问题之前,这是来自 Apple 的文档:如何使用 Quartz 确定字符串的宽度:
如果文本测量对您的应用很重要,那么可以
使用 Quartz 2D 函数计算它们。但是,您可能首先
考虑使用 ATSUI,其优势在于文本布局和
测量。 ATSUI 有多个获取文本指标的函数。不是
只能获得布局后的文本指标,但在极少数情况下
如果您需要它们,您可以获取布局前的文本指标。不像
Quartz,您必须自己执行计算,ATSUI
为您计算测量值。例如,您可以获得
通过调用 ATSUI 函数为文本设置图像边界矩形
ATSUMeasureTextImage。
如果您认为 Quartz 文本比 ATSUI(或
Cocoa),您可以按照以下步骤测量文本的宽度
石英绘制它:
- 调用函数CGContextGetTextPosition获取当前文本位置。
- 使用函数 CGContextSetTextDrawingMode 将文本绘制模式设置为 kCGTextInvisible。
- 绘制文本通过调用函数CGContextShowText在当前文本位置绘制文本。
- 通过调用函数 CGContextGetTextPosition 确定最终文本位置。
- 结束位置减去开始位置即可确定文本的宽度。
这是我的问题:
-
这真的是使用 Core Graphics 确定字符串宽度的最佳方法吗?它看起来很脆弱,而且由于我的文本与 2D 图形元素共存,我想对所有渲染使用相同的上下文。我希望有一些紧凑的方法,例如:
CGContextGetTextWidthAndHeight(context, text);
我读到 ATSUI 已经过时并且将被 Core Text 取代。这是真的吗?如果是的话,iOS 中也是如此吗?
在 iPhone SDK 上,有一系列方法NSString
提供你想要的。
从 iOS 7.0 开始,这些方法是 https://developer.apple.com/library/ios/documentation/UIKit/Reference/NSString_UIKit_Additions/index.html#//apple_ref/occ/instm/NSString/boundingRectWithSize:options:attributes:context::
- boundingRectWithSize:options:attributes:context:
- sizeWithAttributes:
在旧版本的 iOS 上,我们有这些,现已弃用:
– sizeWithFont:
– sizeWithFont:forWidth:lineBreakMode:
– sizeWithFont:constrainedToSize:
– sizeWithFont:constrainedToSize:lineBreakMode:
– sizeWithFont:minFontSize:actualFontSize:forWidth:lineBreakMode:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)