我正在编写一个需要渲染i18n文本的iPhone应用程序,其中包含diacriticals(波浪号,重音符号等)。 Apple提供UIFont类,可用于获取给定的字体/字体大小组合的前导,上升,下降等。
问题在于此信息无法准确反映变音符号。具体而言,大写字母上的变音符号通常超过lineHeight(以前称为前导的UIFont属性)。
整个框架都存在同样的问题,即。 NSString:sizeWithFont也存在同样的问题。
我需要知道文本的真正边界框,因为我使用的是OpenGL,它没有文本绘图支持,因此需要将文本渲染到纹理。
目前,我正在使用黑客来解决这个问题。还有更好的方法吗?
答案 0 :(得分:2)
使用NSString是不可能的,因为它只返回一个大小。您可以尝试CoreText,它似乎支持返回边界框,但这有点矫枉过正。
当Unicode支持像è这样的东西时,这是一个难题(另见:zalgo);事物可以渲染在一行的顶部,因此你不能只绘制字符。一些文本绘制API使您可以指定基线并为您提供边界框,以便您可以同时获得上升和下降,但UIKit不会这样做。
然后,你有疯狂的草书字体与偶尔巨大的上升。目前还不清楚如何处理这些问题。
懒惰的方法是渲染到顶部和底部有边距的纹理(0.5行?1行?),并且不太关心某些透明像素的额外开销。
我没有多看过CoreText,但它看起来并不是特别有希望。