2012-07-31 6 views
6

Ich habe 2 zugeschriebene Strings sagen 'A' und '.'Kerntext - Höhe der Glyphe

Ich muss die Höhe jeder dieser Zeichenfolgen berechnen. Momentan ist die zurückgegebene Höhe für beide gleich, es scheint die maximal mögliche Höhe für das höchste Zeichen in einer gegebenen Schriftart zurückzugeben (selbst wenn dieses Zeichen in der Zeichenkette nicht vorhanden ist).

Ich möchte die genaue Pixelhöhe für jedes dieser Zeichen erhalten, so dass ich eine Ansicht um sie herum anpassen kann, die dem Zeichen (Glyphe) genau entspricht. Ich habe versucht, CTFramesetterSuggestFrameSizeWithConstraints() und CTLineGetTypographicBounds() zu verwenden, aber es gibt eine Zahl zurück, die der Methode der attributierten Zeichenfolgengröße ähnelt.

Wir würden uns über Tipps freuen, wie Sie das tun können!

Antwort

7

erhielt dort am Ende, können Sie es wie folgt tun:

// Create an attributed string 
CTLineRef line = CTLineCreateWithAttributedString(_string); 

// Get an array of glyph runs from the line 
CFArrayRef runArray = CTLineGetGlyphRuns(line); 

// loop through each run in the array  
CTRunRef run = .... 

// Get the range of the run   
CFRange range = CFRangeMake... 

// Use CTRunGetImageBounds         
CGRect glyphRect = CTRunGetImageBounds(run, context, range); 

// glyphRect now contains the bounds of the glyph run, if the string is just 1 character you have the correct dimensions of that character.