其实iOS中已经包含了中文字体。这不奇怪,否则iPhone是通过什么来显示中文?使用下列代码,我们可以查看iPhone上支持的所有字体名:
NSArray *fontFamilies = [UIFontfamilyNames];
for(NSString *fontFam in fontFamilies) {
NSLog(@"=========%@=========",fontFam);
NSArray *fontNames = [UIFontfontNamesForFamilyName:fontFam];
for (NSString* fontName in fontNames) {
NSLog(@"%@",fontName);
}
}
其中就有两个中文字体:
=========Heiti SC=========
STHeitiSC-Medium
STHeitiSC-Light
⋯⋯
=========Heiti TC=========
STHeitiTC-Medium
STHeitiTC-Light
这是两个系统内置的字体族,一个简体黑体,一个是繁体黑体。这两个字体族都分别包含中、轻两种不通字重的字体。
注:黑体是一种无衬线字体(san-serif)。所谓衬线字体,是指末端被加强的字体,这种字体如Times、Times New Roman、宋体,易于识别。而无衬线字体的笔画粗细是一致的,没有末端加强,因此不易识别但比较醒目。对于某些软件,比如电子阅读器,一般应使用宋体等衬线字体 ( serif) 。
由于iOS系统中只提供一种中文字体黑体,对于文本阅读器这类中文软件,我们只能在程序中提供自己的字体文件来增加额外的字体支持。关于在程序中使用自定字体,请参考另一篇博文:《iOS 定制应用程序字体 》。
然后是加载这两个中文字体。请使用 CGFontCreateWithFontName函数:
CGFontRef font_ref =CGFontCreateWithFontName((CFStringRef)@"STHeitiTC-Medium");
接下来的过程正如《iOS定制应用程序字体》中所述的一模一样,映射unichar为Glyphs,然后调用 CGContextShowTextAtPoint函数绘制中文。