カスタムフォントをダウンロードして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
メソッド】
- (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プロジェクトに追加する方法と同様です。ただしダウンロードして登録するのでストーリーボードではカスタムフォントを指定できません。ソースコードとなります。
self.sampleTextLabel.font = [UIFont fontWithName:FONT_POSTSCRIPT_NAME size:20.0f];
UIFont
でフォント名を指定します。ここで使うフォント名は、先ほどターミナルで調べたフォント名を記述します。
参考にしたサイト
最後に参考サイトのリンクを記載します。