UIFontDescriptorTraitsAttribute
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オブジェクトです。



