いまさら、Dynamic Typeを使ってみる。
iOS7では、Dynamic Typeというフォントを統一して管理する機能がOSに組み込まれました。
この機能を使ったアプリは作っていなかったのですが、先日対応してみようと色々と調べたので備忘録がてら、記事にしました。
使い方
このDynamic Typeですが、UIFontを指定できる場面で下記のようなコードを挿入することで、使うことができます。
textField.font = [UIFont preferredFontForTextStyle:UIFontTextStyleBody];
いくつかのDynamic Typeの種類の中から指定したUIFontを返すコードとなります。
フォントのレベルの種類は、以下のようになっています。
- UIFontTextStyleHeadline 見出し
- UIFontTextStyleBody 本文
- UIFontTextStyleSubheadline サブ見出し
- UIFontTextStyleFootnote 脚注
- UIFontTextStyleCaption1 キャプション
- UIFontTextStyleCaption2 少し小さいキャプション
これらは、表示している内容の扱いによって、強弱をつけるように使用すると良いと思います。
ただ、このコードだけでは、動的なフォントの変更を実現できません。
Dynamic Typeの変更の通知を受けるようにしておいて、通知を受けたときに更新するようにしておく方が良いです。
以下のコードで、動的に変更をを反映できます。
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(実行するメソッド)
name:UIContentSizeCategoryDidChangeNotification
object:nil];
この通知のセレクタに呼び出したいメソッドを設定しておいて、その中で先ほどのフォントを指定するコードを書いておけば良いです。
あと、直接Dynamic Typeに直接関係があるわけではないのですが、UITextFieldのPlaceholderのフォントを変更する場合は以下の様なコードになります。
textField.attributedPlaceholder = [[NSAttributedString alloc] initWithString:textField.placeholder attributes:@{NSFontAttributeName:[UIFont preferredFontForTextStyle:UIFontTextStyleSubheadline]}];
これで、PlaceholderのフォントもDynamic Typeが適用されます。
以上で、Dynamic Typeを使ってアプリのフォントを統一することができます。
統一感が出るので、どんどん使っていきたいと思います。