2012-07-31 9 views
6

Mam 2 przypisane ciągi z napisem "A" i "."Tekst podstawowy - Wysokość glifu

Potrzebuję obliczyć wysokość każdego z tych ciągów. Obecnie zwracana wysokość jest taka sama dla obu, wydaje się zwracać maksymalną możliwą wysokość najwyższego znaku w danej czcionce (nawet jeśli ten znak nie występuje w ciągu znaków).

Chciałbym uzyskać dokładną wysokość pikseli dla każdego z tych znaków, dzięki czemu można zmienić rozmiar widoku wokół nich, który pasuje do znaku (glif). Próbowałem już przy użyciu CTFramesetterSuggestFrameSizeWithConstraints() i CTLineGetTypographicBounds(), ale zwraca liczbę podobną do metody wielkości przypisanych ciągów.

Byłbym wdzięczny za wszelkie wskazówki, jak to zrobić!

Odpowiedz

7

Dotarliśmy w końcu, można zrobić to tak:

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