砂箱ファイルを呼び出してサードパーティ製フォントライブラリを動的に取得


先日、サードパーティ製フォントライブラリを動的に取得する方法について検討しました.
次の2つの方法を記録と学習として得た.
第1の方法-アップルの公式のダウンロードアドレスを呼び出してフォントライブラリをダウンロードします:
この方法はIOSが広く伝えられており、公式にも例があり、唐巧が書いた「iOS開発進級中」にも章が詳しく使われており、興味のある学生は唐巧大神のブログを直接クリックすることができます.http://blog.devtang.com/blog/2013/08/11/ios-asian-font-download-introduction/
公式の方法は、フォントを/private/var/mobile/Library/assets/com_にダウンロードすることです.apple_MobileAsset_Font/を使用して取得 
このように1つの利点は、1つのアプリケーションがこのフォントをダウンロードしたことであり、他のアプリケーションもこのフォントを必要とする場合、再びダウンロードする必要がなく、直接使用することができ、共通のフォントと言える.
公式に与えられたフォントは限られており、ダウンロードや使用をサポートしていないフォントが多いので、サードパーティ製のフォントをより多く入手するには別の方法が必要です.
2つ目の方法は、ダウンロードした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]);
        }
    }
}

もし何か間違いがあったら私信を歓迎してください.もっと良い方法があれば教えてください.
あなたの観覧に感謝して、学んで更に感謝します.