为了在自定义 UIView 中定位/缩放字体字形,我需要知道一些字形指标,例如: - 上升(字形从基线的高度,例如“g”位于基线之上的部分) - 下降(字形距基线的深度,例如“g”位于基线下方的部分) - 宽度 - 字距调整 - 斜体校正(字形中超过其斜体宽度的部分)
我尝试子类化NSLayoutManager并从drawGlyphs以下位置读取这些信息:
override func drawGlyphs(forGlyphRange glyphsToShow: NSRange, at origin: CGPoint) {
enumerateLineFragments(forGlyphRange: glyphsToShow) {
(rect, usedRect, textContainer, glyphRange, stop) in
for i in glyphsToShow.location ..< NSMaxRange(glyphsToShow) {
if let textContainer = self.textContainer(forGlyphAt: glyphsToShow.location, effectiveRange: nil) {
var glyphRect = self.boundingRect(forGlyphRange: NSMakeRange(i, 1), in:textContainer)
glyphRect.origin.x += origin.x;
glyphRect.origin.y += origin.y;
/// NOW I HAVE AT LEAST THE BOUNDING BOX
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
但glyphRect …