iOS 7から追加されたDynamic Type機能を使ってみる


iOS 7から設定画面に「文字サイズを変更」が追加されました。

「Dynamic Type機能をサポートしているAppでは、下のスライダで指定したサイズでテキストが表示されます」とあります。では、Dynamic Type機能をサポートするにはどうしたら良いでしょうか。

わかったこと

これまでは、フォントの サイズ を直接数値で指定していましたが、Dynamic Typeでは スタイル を指定するようです。

具体的には、

+ (UIFont *)systemFontOfSize:(CGFloat)fontSize;

などのメソッドを用いて直接サイズ指定していたところを

+ (UIFont *)preferredFontForTextStyle:(NSString *)style

メソッドを用いてスタイルを指定します。(他にもスタイルを指定する方法がありますが、ここでは解説しません)

スタイルには次の値を指定できます。

  • UIFontTextStyleHeadline
  • UIFontTextStyleBody
  • UIFontTextStyleSubheadline
  • UIFontTextStyleFootnote
  • UIFontTextStyleCaption1
  • UIFontTextStyleCaption2

画面に表示されるフォントサイズは、指定したスタイルによって自動的に決定するようです。

フォントサイズの設定変更を監視する

このままだと設定画面からフォントサイズを変更しても何も起こりません。フォントサイズの変更を監視するには、 NSNotificationCenterUIContentSizeCategoryDidChangeNotification を追加します。

[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(preferredContentSizeChanged:)
name:UIContentSizeCategoryDidChangeNotification
object:nil];

こうすることにより、アプリ起動時にフォントサイズ設定が変わっていた場合、preferredContentSizeChanged が呼ばれるようになります。この中でテキストを再描画してあげれば良いでしょう。

実行結果

とりあえず、設定画面の文字サイズが反映されるようになりました。

まだまだ調査段階なのでツッコミ、訂正など歓迎です!m(_ _)m

リンク