2010-08-03 44 views
2

我正在寫一個iPhone應用程序,需要呈現包含diacriticals(波浪線,重音等)的i18n文本。 Apple提供的UIFont類可用於獲取給定的字體/字體大小組合的領先,上升,下降等。UIFont和Diacriticals

問題是,此信息不能準確反映變音符號。具體而言,大寫字母的變音符號通常超過lineHeight(以前稱爲領先的UIFont屬性)。

整個框架都存在同樣的問題, NSString:sizeWithFont也有同樣的問題。

我需要知道文本的真正邊界框,因爲我使用的OpenGL沒有文本繪圖支持,因此需要將文本呈現到紋理。

目前,我使用黑客來解決這個問題。有沒有更好的辦法?

回答

2

NSString不可能,因爲它只是返回一個大小。您可以嘗試似乎支持返回邊界框的CoreText,但這有點矯枉過正。

當Unicode支持像è這樣的東西時(參見:zalgo),這是個難題。事情可以呈現在一行的頂部,所以你不能只繪製字符。一些文本繪圖API使您可以指定基線,併爲您提供邊界框,以便您可以同時獲得上行和下行,但UIKit不會執行此操作。

然後,你有瘋狂的草書字體偶爾巨大的上升。目前還不清楚如何處理這些問題。

懶惰的方式是渲染到頂部和底部的邊距(0.5行?1行?)的紋理,而不必太在意某些透明像素的額外開銷。

我還沒有看過CoreText,但它看起來並不特別有希望。

+0

「懶惰的方式是渲染紋理,在頂部和底部留有邊距(0.5行?1行?),而不必太在意某些透明像素的額外開銷。」 是的,這正是我正在做的。感謝您的迴應。 – 2010-08-03 18:10:14