2012-07-31 23 views
6

Tengo 2 cadenas atribuidas que dicen 'A' y '.'Texto principal - Altura del glifo

Necesito calcular la altura de cada una de estas cadenas. Actualmente la altura devuelta es la misma para ambos, parece devolver la altura máxima posible para el personaje más alto en una fuente dada (incluso si ese carácter no está presente en la cadena).

Me gustaría obtener la altura de píxel exacta para cada uno de estos caracteres, de modo que pueda cambiar el tamaño de una vista a su alrededor que se ajuste perfectamente al carácter (glifo). Intenté usar CTFramesetterSuggestFrameSizeWithConstraints() y CTLineGetTypographicBounds() pero devuelve un número similar al método de tamaño de cadenas atribuidas.

¡Agradecería cualquier consejo sobre cómo hacerlo!

Respuesta

7

llegamos allí, al final, puede hacerlo de esta manera:

// 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. 
Cuestiones relacionadas