UIFont和变音符号

时间:2010-08-03 16:21:12

标签: iphone objective-c cocoa-touch uikit uifont

我正在编写一个需要渲染i18n文本的iPhone应用程序,其中包含diacriticals(波浪号,重音符号等)。 Apple提供UIFont类,可用于获取给定的字体/字体大小组合的前导,上升,下降等。

问题在于此信息无法准确反映变音符号。具体而言,大写字母上的变音符号通常超过lineHeight(以前称为前导的UIFont属性)。

整个框架都存在同样的问题,即。 NSString:sizeWithFont也存在同样的问题。

我需要知道文本的真正边界框,因为我使用的是OpenGL,它没有文本绘图支持,因此需要将文本渲染到纹理。

目前,我正在使用黑客来解决这个问题。还有更好的方法吗?

1 个答案:

答案 0 :(得分:2)

使用NSString是不可能的,因为它只返回一个大小。您可以尝试CoreText,它似乎支持返回边界框,但这有点矫枉过正。

当Unicode支持像è这样的东西时,这是一个难题(另见:zalgo);事物可以渲染在一行的顶部,因此你不能只绘制字符。一些文本绘制API使您可以指定基线并为您提供边界框,以便您可以同时获得上升和下降,但UIKit不会这样做。

然后,你有疯狂的草书字体与偶尔巨大的上升。目前还不清楚如何处理这些问题。

懒惰的方法是渲染到顶部和底部有边距的纹理(0.5行?1行?),并且不太关心某些透明像素的额外开销。

我没有多看过CoreText,但它看起来并不是特别有希望。