47
Help us understand the problem. What are the problem?

More than 5 years have passed since last update.

posted at

updated at

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

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

6946da98e326fcaabf121b8694a9665d.jpeg

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

わかったこと

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

具体的には、

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

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

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

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

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

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

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

dynamic.jpeg

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

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

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

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

実行結果

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

min.pngmid2.pngmax.png

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

リンク

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Sign upLogin
47
Help us understand the problem. What are the problem?