UIFontのfontWithNameに何を入れれば良いか

公開: 2015-06-04 03:59
更新: 2016-04-29 06:03

どうもこんにちは。
泣く子も黙るあっきぃです。
先日は犬をもふもふするためにワンコの触れ合いコーナーに行きましたが、1匹も近寄ってこなかったです。




さてUIFontのお話。

UIFontには
+ (UIFont *)fontWithName:(NSString *)fontName size:(CGFloat)fontSize;
ってな関数があります。

[UIFont fontWithName:nil size:10.0];

今日はこれの使い方を覚えましょう。




1.PostScript名を入れよう

fontWithNameに何が入れられるかAppleのドキュメントを見みると、

fontName: The fully specified name of the font. This name incorporates both the font family name and the specific style information for the font.

とのこと。分かりましたか。これはアメリコ大陸の言葉ですよ。
まぁ雰囲気で訳すとつまり「PostScript名を入れろ。」ということです。


何故なのか。

こちらの例を見てください。

UIFont *a1 = [UIFont fontWithName:@"Hiragino Kaku Gothic Pro" size:10];
UIFont *a2 = [UIFont fontWithName:@"Hiragino Kaku Gothic ProN" size:10];
UIFont *a3 = [UIFont fontWithName:@"Hiragino Kaku Gothic ProN W3" size:10];
UIFont *a4 = [UIFont fontWithName:@"Hiragino Kaku Gothic ProN W6" size:10];
UIFont *a5 = [UIFont fontWithName:@"ヒラギノ角ゴ ProN" size:10];
UIFont *a6 = [UIFont fontWithName:@"ヒラギノ角ゴ ProN W3" size:10];
UIFont *a7 = [UIFont fontWithName:@"ヒラギノ角ゴ ProN W6" size:10];

a1〜a7までフォントが入っています。


こちらを

NSLog(@"a1:%@", a1.fontName);

てな感じで調べるとそれぞれどうなるでしょうか。
なんとこうなります。

a1:HiraKakuProN-W3
a2:HiraKakuProN-W3
a3:HiraKakuProN-W3
a4:HiraKakuProN-W3
a5:HiraKakuProN-W3
a6:HiraKakuProN-W3
a7:HiraKakuProN-W3

全部一緒!

勘の良い人はここで
「あ、フォントファミリだから、ウェイト(W)やNは無視するんだな。」と思うでしょう。


そこで、もうひとセット見てみましょう。

UIFont *b1 = [UIFont fontWithName:@"Hiragino Kaku Gothic Pro" size:10];
UIFont *b2 = [UIFont fontWithName:@"Hiragino Kaku Gothic Pro W3" size:10];
UIFont *b3 = [UIFont fontWithName:@"Hiragino Kaku Gothic Pro W6" size:10];
UIFont *b4 = [UIFont fontWithName:@"ヒラギノ角ゴ Pro" size:10];
UIFont *b5 = [UIFont fontWithName:@"ヒラギノ角ゴ Pro W3" size:10];
UIFont *b6 = [UIFont fontWithName:@"ヒラギノ角ゴ Pro W6" size:10];

同じく調べてみると...

b1:HiraKakuProN-W3
b2:(null)
b3:(null)
b4:(null)
b5:HiraKakuProN-W3
b6:(null)

となります。

勘のいいひとはこの時点で「マジ意味不」となるでしょう。

じーっと見ると「Hiragino Kaku Gothic Pro W3」と「ヒラギノ角ゴ Pro W3」が違う挙動、
「Hiragino Kaku Gothic Pro」と「ヒラギノ角ゴ Pro」が違う挙動をとっていることが分かりますね。


というわけでPostScript名を入れれば間違いないわけです。

(PostScript名は、Macユーザーなら「Font Book」ってなデフォルトアプリがあるのでそれで確認してみよう!)

UIFont *font1 = [UIFont fontWithName:@"HiraKakuProN-W3" size:10];
UIFont *font2 = [UIFont fontWithName:@"HiraKakuProN-W6" size:10];
font1:HiraKakuProN-W3
font2:HiraKakuProN-W6

そもそもW6はこれじゃないと指定できないし。




2.デフォルトを使いたいとき

例を見てみましょう。

UIFont *c1 = [UIFont fontWithName:nil size:10];
UIFont *c2 = [UIFont fontWithName:@"" size:10];
UIFont *c3 = [UIFont systemFontOfSize:10];

これらを先ほどのように調べるとこうなります。

c1:Helvetica
c2:(null)
c3:.HelveticaNeueInterface-Regular

つまり、

NSStrig *fontName;
if(case1) {
        fontName = @"HiraKakuProN-W3";
}
...
UIFont *font = [UIFont fontWithName:fontName size:10];

という書き方と

NSStrig *fontName = @"";
if(case1) {
        fontName = @"HiraKakuProN-W3";
}
...
UIFont *font = [UIFont fontWithName:fontName size:10];

という書き方では同じ条件でも、
結果が変わることになってしまうことがあるのです。


おそらく見た目は変わりませんが、
実装するとき注意すると素敵です。





以上です。

いかがでしたか。こんな関数でも色々あるものなのです。

ちょっと勉強になったと思った人は周りの人にも教えてあげよう!


ではでは。



この記事をシェア
この記事にコメントする
書き込む
あっきぃ(@appstars_aki)
Web、iOSなフリーランサーです。好きなものはお寿司です。でもお寿司は高いので普段は雑草とか拾ったドングリを食べています。お仕事や意味もなく毎月お小遣いをくれる人を探してます。

お仕事の依頼や自分で作ったアプリのレビューを希望しちゃう方はaki@appstars.jpまでご連絡ください。