UIFontDescriptorの属性キー12種の詳細

2014年9月9日(火)
西方 夏子(にしかた・なつこ)

UIFontDescriptorTraitsAttribute

フォント特性を示すNSDictionaryオブジェクトです。NSDictionaryのキーとして、以下の値が定義されています(表1)。

[表1] フォント特性を示すためのキー

キー
UIFontSymbolicTrait UIFontDescriptorSymbolicTraits(NSNumber)
UIFontWeightTrait -1.0から1.0に正規化された太さ(NSNumber)
UIFontWidthTrait -1.0から1.0に正規化された幅(NSNumber)
UIFontSlantTrait -1.0から1.0に正規化された斜体の角度(NSNumber)

なお、これらのキーは、ディスクリプタからフォント特性を取得するために用意されています。フォント特性を設定するには、fontDescriptorWithSymbolicTraits:を利用します。fontDescriptorWithSymbolicTraits:の使用例は、ソースコード6(前回記事)を確認してください。

フォント特性を取得する例を次に示します(ソースコード14)。

[ソースコード14] フォント特性の取得

NSDictionary *traits =
[helveticaNeueCondensedBold objectForKey:UIFontDescriptorTraitsAttribute];

NSString *traitsString =
[NSString stringWithFormat:@"%@:%@:%@:%@\n", 
                           traits[UIFontSymbolicTrait],
                           traits[UIFontWidthTrait],
                           traits[UIFontWeightTrait],
                           traits[UIFontSlantTrait]];

NSLog(@"Symbolic: %@, Weight: %@, Width: %@, Slant: %@",
      traits[UIFontSymbolicTrait],
      traits[UIFontWidthTrait],
      traits[UIFontWeightTrait],
      traits[UIFontSlantTrait]);
  
// ログ表示結果
// Symbolic: 66, Weight: -0.2, Width: 0.4, Slant: 0

上記キーUIFontSymbolicTraitを示す値は、UIFontDescriptorSymbolicTraits型(enum uint32_t)です。詳細は、UIFontDescriptorリファレンスガイドを参照してください。
上記の例では、UIFontSymbolicTraitの値が66となっています。これは、(UIFontDescriptorTraitCondensed | UIFontDescriptorTraitBold)を意味しています。

UIFontDescriptorFixedAdvanceAttribute

表示グリフの送り幅(アドバンス)を示すNSNumberオブジェクトです。すべてのグリフで固定の送り幅が用いられます。1ページ目のソースコード8で生成したhelveticaCondensedBoldの送り幅を固定するためには、下記コードでディスクリプタを生成します。これで生成されるディスクリプタを用いたテキスト表示の結果が、図3です。

[ソースコード15] 送り幅固定のディスクリプタを生成

// 送り幅を10.0ポイントに固定
UIFontDescriptor *fixedAdvanceHelvetica = 
[helveticaNeueCondensedBold fontDescriptorByAddingAttributes:
    @{UIFontDescriptorFixedAdvanceAttribute: @10.0}];

図3: helveticaNeueCondensedBoldによる表示(上)とfixedAdvanceHelveticaによる表示(下)

UIFontDescriptorFeatureSettingsAttribute

フォントに関する様々な機能を設定するために用いられます。値はNSArrayオブジェクトで、各機能を表すNSDictionaryオブジェクトを複数格納します。
NSDictionaryオブジェクトは、キーとしてUIFontFeatureTypeIdentifierKeyとUIFontFeatureSelectorIdentifierKeyを持ちます。なお、各キーの値は、Core Textフレームワーク内で定義されているため、使用時にはCoreTextをインポートする必要があります(@import CoreText;)。

例として、すべての数字を大文字で表示する方法を以下に示します(数字にも大文字、小文字の区別があるフォントでのみ有効)。
なお、UIFontDescriptorFeatureSettingsAttributeで設定できる機能は、フォントによって異なるので注意しましょう。ここでは、Hoeflerフォントを使用します。
下記コードで生成されるディスクリプタを用いたテキスト表示の結果が、図4です。

[ソースコード16] 機能設定を利用したフォントの調整

NSArray *featureSetting =
@[
  // 設定する機能を以下の辞書形式で表現しNSArrayの要素とする
  @{UIFontFeatureTypeIdentifierKey: @(kNumberCaseType),
    UIFontFeatureSelectorIdentifierKey: @(kUpperCaseNumbersSelector)}
  ];

// Hoeflerフォントのディスクリプタを生成 
UIFontDescriptor *hoefler =
[UIFontDescriptor fontDescriptorWithName:@"HoeflerText-Regular" size:26.0];

// 数字に関する設定を追加 
UIFontDescriptor *featuredHoefler =
[hoefler fontDescriptorByAddingAttributes:
    @{UIFontDescriptorFeatureSettingsAttribute: featureSetting}];

図4: hoeflerによる表示(上)とfeaturedHoeflerによる表示(下)

UIFontDescriptorTextStyleAttribute

次回で説明するDynamic Typeを適用する際、テキストスタイルを示すNSStringオブジェクトです。

この記事のもとになった書籍
UIKit徹底解説 iOSユーザーインターフェイスの開発

西方 夏子 著/丸山 弘詩 編
価格:3,800円+税
発売日:2014年06月13日発売
ISBN:978-4-8443-3608-2
発行:インプレスジャパン

UIKit徹底解説 iOSユーザーインターフェイスの開発

ユーザーインターフェイス(UI)を制御するUIKitは、iOSアプリの中心的役割を担います。UIKitを深く理解することが、アプリ開発での多くの問題解決に繋がります。本書では、アプリの起動から画面表示、画面レイアウト、イベントハンドリングと、常に稼働しているUIKitの機能を丁寧に解説します。メインとなるコンテンツの表示からステータスバーを含むバーの制御、フォントやテキストの改良など、ビューやテキストの「外観」(アピアランス)を改善する内容も充実させています。使用頻度の高いテーブルビューとコレクションビュー、そしてユニバーサルアプリ化に有益なカスタムコンテナビューコントローラに関しては、チュートリアル形式で解説します。また、StoryboardやAuto Layoutも今後のアプリ開発でさらに重要となる状況を見越して、詳細解説に留まらず同じくチュートリアルで多くの具体例を紹介します。

Amazon詳細ページへImpress詳細ページへ

著者
西方 夏子(にしかた・なつこ)

ソフトウェアエンジニア。大手電機メーカーにおける組込みソフトウェアの開発を経て、現在は個人でiOS向けのアプリケーションを開発している。代表作であるローン計算アプリ「iLoan Calc」は、個人の方のみならず、多くの不動産業、金融業の方からも愛用されている。『iPhoneアプリ開発エキスパートガイド iOS6対応』(共著・インプレスジャパン刊)、『上を目指すプログラマーのためのiPhoneアプリ開発テクニック iOS 7編』(共著・インプレスジャパン刊)などの執筆にも携わり、現在は執筆業を中心にアプリ開発と育児を両立中。

連載バックナンバー

Think ITメルマガ会員登録受付中

Think ITでは、技術情報が詰まったメールマガジン「Think IT Weekly」の配信サービスを提供しています。メルマガ会員登録を済ませれば、メルマガだけでなく、さまざまな限定特典を入手できるようになります。

Think ITメルマガ会員のサービス内容を見る

他にもこの記事が読まれています