2014-04-13 14 views
6

Ich sah gerade diese recent question auf SO, die etwas nah kommt, was ich hier frage.Informationen über eine Glyphe in Core Text erhalten

Also versuche ich eine mathematische Gleichung mit Core Text und NSAttributedString zu setzen. Es funktionierte ziemlich gut für Ausdrücke wie x , aber dann stieß ich auf ein Problem, wenn ich y verwende. Hat nämlich ‚y‘ ein Abseilgerät, das ich weiß nicht, wie Rechnung in meiner Zeichnung Code zu nehmen:

CGContextSaveGState(context); 
CGContextTranslateCTM(context, x, sizeOfGlyph.height/2.0); 
CGContextScaleCTM(context, 1.0, -1.0); 

CGContextSetTextMatrix(context, CGAffineTransformIdentity); 
CTLineRef line = CTLineCreateWithAttributedString((__bridge CFAttributedStringRef)attributedSubstring); 
CGContextSetTextPosition(context, 0.0, 0.0); 
CTLineDraw(line, context); 

CFRelease(line); 
CGContextRestoreGState(context); 

Grundsätzlich übersetze ich den Zusammenhang mit der Höhe des Glyphe Hälfte (als here berechnet) die beginnt Text an der Grundlinie der Glyphe. Wie Sie sich vorstellen können, führt dies zu Problemen mit Glyphen wie 'y', weil die halbe Höhe der Glyphe nicht die Grundlinie der Glyphe ist. Ich denke nicht, dass es ausreicht, den Senkkörper der Schriftart zu verwenden, weil ich nicht wissen kann, ob diese Glyphe eine Unterlänge hat oder nicht. Also, was ich herausfinden möchte, ist , ob es eine Möglichkeit gibt, den Descender (oder irgendwelche gewünschten Metriken) für eine bestimmte Glyphe zu finden?

Jedes Know-how zu diesem Thema wäre willkommen, ich fange gerade erst mit Core Text an.

Antwort

3

Was ich getan habe, war, den Ursprung der Glyphe zu verwenden, die von der Bildgrenzenfunktion zurückgegeben wurde. Ich berechnete die Grenzen des Glyphen unter Verwendung der in this answer beschriebenen Methode. Der Ursprung des resultierenden CGRect gibt die y-Position der unteren linken Ecke der Glyphe an, die im Falle von 'y' negativ wäre. Wenn Sie glyphRect.origin.y + glyphRect.size.height addieren, erhalten Sie den Abstand vom oberen Rand des Symbols zur Grundlinie.