2012-07-31 28 views
6

2 atıflı dizgem var 'A' ve '.'Çekirdek Metin - glif yüksekliği

Bu dizelerin her birinin yüksekliğini hesaplamam gerekir. Halihazırda geri dönen yükseklik her ikisi için de aynıdır, belirli bir fonttaki en yüksek karakter için mümkün olan maksimum yüksekliği döndürür (bu karakter dizede bulunmasa bile).

Bu karakterlerin her biri için tam piksel yüksekliğini almak istiyorum, böylece karaktere (glif) tam olarak uyan bir görünümü yeniden boyutlandırabilirim. CTFramesetterSuggestFrameSizeWithConstraints() ve CTLineGetTypographicBounds() kullanarak denedim, ancak öznitelikli dizeleri boyutu yöntemine benzer bir sayı verir.

Bunu yapmayla ilgili her türlü ipucu için minnettar olurum!

cevap

7

sonunda orada var, bunu şöyle yapabilirsiniz:

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