UIFontDescriptorTraitsAttribute

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

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

キー値
UIFontSymbolicTraitUIFontDescriptorSymbolicTraits(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詳細ページへ

この記事のキーワード :

人気記事トップ10

人気記事ランキングをもっと見る

企画広告も役立つ情報バッチリ! Sponsored

ClickHouse Cloudが実現した広告運用SaaS「ATOM」のデータ基盤革新、パフォーマンスを向上しながら、運用負荷とコストを削減 11月11日 6:20 AIで開発が加速する時代、品質保証はどう変わる? Tricentisが示すAIエージェント活用の実像 11月9日 6:45 悪用までの猶予が「1分」に迫るフロンティアAI時代に開発と本番を貫く脆弱性管理が必要 10月29日 8:30 欧州CRA対応とSBOM運用。AI生成コードのOSS混入問題の対策とは ――スニペット単位で検出する「FossID」「Insignary Clarity」によるSBOM運用 9月16日 6:40 PostgreSQLからTiDBへ、稼働中SaaSで進める段階的DB移行の実践と再設計への展望 9月7日 6:30 機能安全開発におけるGoogleTestの活用を支援!「Parasoft C/C++test CT」で実現する効率化&AI連携 4月14日 6:30 【CNDW2025】Grafanaが明かす「オブザーバビリティの哲学」ー最小限の労力で実用的なインサイトを得るには 1月23日 6:30 【CNDW2025】プロダクト急増に備える基盤刷新 ーウェルスナビがECSからEKSへの移行で得た知見とは 1月15日 6:30 【CNDW2025】250環境を5人で運用、構築時間は30分に ーKINTOテクノロジーズが語るインフラ基盤組織の作り方 2025年12月18日 6:30 新たな自動化で熱視線! AIエージェントの「推論能力」を支える2つのコンポーネントとは? 2025年11月28日 6:30