2010-05-05 119 views
7

我试图在核心文本中找到一行文本的边界。为了简单起见,假定它具有单个字符。 目前我使用下面的方法:在核心文本中查找文本的边界矩形

line = CTLineCreateWithAttributedString(attrString); 
rect = CTLineGetImageBounds(line, context); 

它的工作原理时代的大多数,但对于某些字符,如数学斜体d(统一:0x1D451)或数学斜体Q(Unicode:当0x1D45E)宽度有点短。

我试过使用CTLineGetTypographicBounds()CTFramesetterSuggestFrameSizeWithConstraints,但他们也没有帮助(我认为他们使用字形先行来找到宽度,而不是它的图形宽度。)由于字体本身不是斜体,我也不能使用倾斜角度来纠正这一点。

我试着直接访问字形并使用CTFontCreatePathForGlyph(),但因CGGlyph和UniChar都是16位而失败,我需要32位字符。

有谁知道我是否做错了什么?如果是这样,什么是正确的方式?

更新:

,以确保它是不相关的字体的问题,我用不同的字体。甚至对于Arial Italic中的ASCII字符也存在问题。

更新:

忽略我以前的更新!事实证明这一个(与Arial斜体的问题)是我自己的错误。第一个问题仍然存在。

回答

3

根据我提出的错误报告,显然这是一个CoreText问题,出现在极少数情况下。只要我找到修复,就会让你知道。

更新:3月15日'12

我忘了更新这越快,但这个是固定的。该修复程序在OS X Lion/iOS 5中。

1

据我所知,CTLineGetImageBounds是正确的功能使用。我建议在RadarWeb提交一份错误报告。

+1

我刚刚提交了一个错误。如果我听到任何消息,会让你知道。 – mohsenr 2010-05-08 10:53:31