UIFontDescriptorの属性キー12種の詳細
UIFontDescriptorTraitsAttribute
フォント特性を示すNSDictionaryオブジェクトです。NSDictionaryのキーとして、以下の値が定義されています(表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)。
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です。
// 送り幅を10.0ポイントに固定 UIFontDescriptor *fixedAdvanceHelvetica = [helveticaNeueCondensedBold fontDescriptorByAddingAttributes: @{UIFontDescriptorFixedAdvanceAttribute: @10.0}];
UIFontDescriptorFeatureSettingsAttribute
フォントに関する様々な機能を設定するために用いられます。値はNSArrayオブジェクトで、各機能を表すNSDictionaryオブジェクトを複数格納します。
NSDictionaryオブジェクトは、キーとしてUIFontFeatureTypeIdentifierKeyとUIFontFeatureSelectorIdentifierKeyを持ちます。なお、各キーの値は、Core Textフレームワーク内で定義されているため、使用時にはCoreTextをインポートする必要があります(@import CoreText;)。
例として、すべての数字を大文字で表示する方法を以下に示します(数字にも大文字、小文字の区別があるフォントでのみ有効)。
なお、UIFontDescriptorFeatureSettingsAttributeで設定できる機能は、フォントによって異なるので注意しましょう。ここでは、Hoeflerフォントを使用します。
下記コードで生成されるディスクリプタを用いたテキスト表示の結果が、図4です。
NSArray *featureSetting = @[ // 設定する機能を以下の辞書形式で表現しNSArrayの要素とする @{UIFontFeatureTypeIdentifierKey: @(kNumberCaseType), UIFontFeatureSelectorIdentifierKey: @(kUpperCaseNumbersSelector)} ]; // Hoeflerフォントのディスクリプタを生成 UIFontDescriptor *hoefler = [UIFontDescriptor fontDescriptorWithName:@"HoeflerText-Regular" size:26.0]; // 数字に関する設定を追加 UIFontDescriptor *featuredHoefler = [hoefler fontDescriptorByAddingAttributes: @{UIFontDescriptorFeatureSettingsAttribute: featureSetting}];
UIFontDescriptorTextStyleAttribute
次回で説明するDynamic Typeを適用する際、テキストスタイルを示すNSStringオブジェクトです。