通过调用沙盒文件动态获取第三方字体库

前一阵研究了--关于动态获取第三方字体库的方法

得到两种方法下面作为记录与学习


第一种方法- 调用苹果官方的下载地址下载字体库:

这种方法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]);
        }
    }
}

如果有什么错误欢迎私信我,如果有更好地方法也一定要告诉我哦~

感谢你的观看,学以致用更感谢。


评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值