IOS运行时动态注册字体
IOS运行时动态注册字体
在IOS开发中,使用第三方字体,如ttf文件,otf文件,是很简单的。只需要两个步骤。1,讲 ttf文件,otf文件添加到工程根目录中。2,在info.plist中增加字体文件,是字体文件名。在使用时,双击打开字体文件,标题会显示字体名称,使用那个自体名称(setFontName)即可。在android中,是把字体文件拷贝到asset目录中,再使用typeface类根据文件得到其实例。
现在的问题是,在我们玩图的开发中,由于中文字体过大,需要从线上下载,下载到本地使用,这就涉及到一个注册字体问题。IOS应用程学在启动时,会自动读取info.plist文件,如果在在当前目录找到对应的字体文件,就会向系统注册这个字体,然后才能根据字体名称使用。所以在字体在线下载这个功能中,提前在infp.plist中注册字体是不可行的,那就要动态注册字体了,就是运行时下载字体ttf文件,下载到documents目录中,然后根据字体文件全文件名(ttfFileName)去注册。下面是关键的代码。、
NSURL *url = [NSURL fileURLWithPath:ttfFileName];
CGDataProviderRef fontDataProvider = CGDataProviderCreateWithURL((__bridge CFURLRef)url);
if (fontDataProvider == NULL)
return ttfFileName;
CGFontRef newFont = CGFontCreateWithDataProvider(fontDataProvider);
CFErrorRef error;
if(!CTFontManagerRegisterGraphicsFont(newFont, &error)){
CFStringRef errorDescription = CFErrorCopyDescription(error);
NSLog(@"Failed to load font: %@", errorDescription);
CFRelease(errorDescription);
}
CFRelease(newFont);
CFRelease(fontDataProvider);
这就是根据字体文件的全文件名动态注册的代码。android就不存在注册不注册的问题,因为它本来就是根据字体文件全文件名来省城typeface实例的。