LoginSignup
7
6

More than 3 years have passed since last update.

カスタムフォントをダウンロードしてiOSアプリ内で使えるようにする

Posted at

カスタムフォントをダウンロードしてiOSアプリ内で使えるようにする

はじめに

随分前に作成したサンプルコードとなりますが、当時あまり参考になるサイトがなかったので参考になるかと思い投稿します。
大抵検索すると hogehoge.ttf をXcodeプロジェクトに追加する記事がヒットすると思います。しかしたくさんのフォントを搭載したくなるとアプリサイズが増大するためダウンロードして後から追加する形でカスタムフォントを使えるようにしたいと考えるのではないでしょうか?
古いコードなのでObjective-Cです。SwiftからはBridgeして使うこととなりますが、局所的なので今でも使えるのではないかと思い投稿します。

サンプルプログラム

Githubにアップしてありますので参考にしてください

フォント名(PostScript名)を調べる

ターミナルより mdls コマンドで調べます。

例えばMacに入っているArialフォントを例にとりますと、ターミナルに mdls /Library/Fonts/Arial.ttf と入力して実行します。
そうすると色々と表示されます。

【実行例】

$ mdls /Library/Fonts/Arial.ttf
com_apple_ats_name_family          = (
    Arial
)
com_apple_ats_name_fond            = (
    ArialMT
)
com_apple_ats_name_full            = (
    Arial
)
com_apple_ats_name_postscript      = (
    ArialMT
)
com_apple_ats_name_style           = (
    Arrunta,
          :
         省略

com_apple_ats_name_postscript と表示される項目があります。その名称をピックアップします。
実行例では、 ArialMT となっています。これがフォント名(PostScript名)です。

ダウンロードしたカスタムフォントを登録する

サンプルコードの loadFontData メソッドに記述されています。

loadFontData メソッド】

loadFontData
- (BOOL)loadFontData:(NSData *)fontData {
    BOOL result = true;
    CFErrorRef error;
    CGDataProviderRef provider = CGDataProviderCreateWithCFData((__bridge CFDataRef)fontData);
    CGFontRef font = CGFontCreateWithDataProvider(provider);
    if (! CTFontManagerRegisterGraphicsFont(font, &error)) {
        CFStringRef errorDescription = CFErrorCopyDescription(error);
        ERROR_LOG(@"Failed to load font: %@", errorDescription);
        CFRelease(errorDescription);
        result = false;
    }
    CFRelease(font);
    CFRelease(provider);

    return result;
}

引数のfontDataはダウンロードしたカスタムフォントのバイナリーデーターです。
CTFontManagerRegisterGraphicsFontを実行することでカスタムフォントが使えるようになります。

登録後カスタムフォントを表示する

カスタムフォントを登録後はXcodeプロジェクトに追加する方法と同様です。ただしダウンロードして登録するのでストーリーボードではカスタムフォントを指定できません。ソースコードとなります。

applyButtonAction
    self.sampleTextLabel.font = [UIFont fontWithName:FONT_POSTSCRIPT_NAME size:20.0f];

UIFontでフォント名を指定します。ここで使うフォント名は、先ほどターミナルで調べたフォント名を記述します。

参考にしたサイト

最後に参考サイトのリンクを記載します。

7
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
6