前一阵研究了--关于动态获取第三方字体库的方法
得到两种方法下面作为记录与学习
第一种方法- 调用苹果官方的下载地址下载字体库:
这种方法IOS流传的比较广泛,官方也有事例来供我们学习,而在唐巧写的《iOS开发进阶中》也有详细的使用章节,有兴趣的同学可以直接点击唐巧大神的博客:http://blog.devtang.com/blog/2013/08/11/ios-asian-font-download-introduction/
官方的方法是通过把字体下载至/private/var/mobile/Library/Assets/com_apple_MobileAsset_Font/来获取使用
这样有一个好处就是一个应用下载了这个字体,当其他的应用也需要这种字体时,不需要再次下载就可以直接使用,算是公共字体。
而官方给的字体是有限的,有很多字体官方并不支持下载与使用,所以我们需要另外的方法来使我们获得更多的第三方字体
第二种方法,是通过在沙河中寻找到,已经下载好的ttf文件,来进行激活,从而使字体可用:
这种方法因为是下载在沙河中的,所以只有本身的应用可以使用,其他的应用是访问不了的。
//fontName 为家族中的字体名
NSString *fontPath = [NSString stringWithFormat:@"%@/Library/Assets/com_apple_MobileAsset_Font/",NSHomeDirectory()];
fontPath = [fontPath stringByAppendingPathComponent : [NSString stringWithFormat:@"%@.ttf",fontName]];
NSURL *url = [NSURL fileURLWithPath:fontPath];
CGDataProviderRef fontDataProvider = CGDataProviderCreateWithURL((CFURLRef)url);
CGFontRef newFont = CGFontCreateWithDataProvider(fontDataProvider);
CFErrorRef error;
if(!CTFontManagerRegisterGraphicsFont(newFont, &error))
NSLog(@"failed!");
// else
// NSLog(@"success!");
error = nil;
CGDataProviderRelease(fontDataProvider);
<pre name="code" class="objc"> _textView.textView.font = [UIFont fontWithName:fontName size:12.0f];
流程很简单,只要你知道你的ttf文件下载到哪个位置 找到这个位置然后获取相应地文件名,然后进行激活, 正常使用就可以了。
特别注意的是:
不管是方法一还是方法二我们都需要注意的是,在使用前必须知道字体在家族中的名字,才能正常使用,所以建议ttf文件的前缀要与名字相同。
附:寻找家族中字体名的方法
- (void)fontsTTF{
NSArray* familys = [UIFont familyNames];
NSLog(@"%lu",(unsigned long)familys.count);
for (int i = 0; i<[familys count]; i++) {
NSString* family = [familys objectAtIndex:i];
NSArray* fonts = [UIFont fontNamesForFamilyName:family];
for (int j = 0; j<[fonts count]; j++) {
NSLog(@"FontName:%@",[fonts objectAtIndex:j]);
}
}
}
如果有什么错误欢迎私信我,如果有更好地方法也一定要告诉我哦~
感谢你的观看,学以致用更感谢。