属性付きテキストによるテキストの装飾(後編)
2014年9月30日(火)
NSWritingDirectionAttributeName(iOS 7以降)
テキストの方向を指定するためのNSNumber(int)を含むNSArrayオブジェクトです。
テキストの方向は、0から3までの値で示します。
なお、この値はUnicodeの双方向アルゴリズム(Unicode Bidirectional Algorithm)における制御文字と同等の意味を持ちます。
値 | Unicode制御文字 | 定義 |
---|---|---|
0 | LRE | NSWritingDirectionLeftToRight | NSTextWritingDirectionEmbedding |
1 | RLE | NSWritingDirectionRightToLeft | NSTextWritingDirectionEmbedding |
2 | LRO | NSWritingDirectionLeftToRight | NSTextWritingDirectionOverride |
3 | RLO | NSWritingDirectionRightToLeft | NSTextWritingDirectionOverride |
NSWritingDirectionLeftToRightは左から右、NSWritingDirectionRightToLeftは右から左への書式方向を示します。また、NSTextWritingDirectionEmbeddingは単語単位で指定の方向へ表記するのに対し、NSTextWritingDirectionOverrideは文字をすべて指定の方向に表記します。
この属性は、日本語や英語などの左から右に表記する言語と、ヘブライ語やアラビア語など右から左に表記する言語が混在する際に、表記する方向を明示的に指定するために使用できます。
例えば、ヘブライ語と英語が混在しているテキストでは、先頭にヘブライ語があると、それに続く英語部分が、ヘブライ語の左にきてしまいます。これを防ぐために、NSWritingDirectionAttributeName属性を使用して、文章全体は左から右への書式であることを明確にする必要があります。
NSString *hebrewTitle = textField.text; // ヘブライ語(右から左) NSString *text = [NSString stringWithFormat:@"%@ is the title in Hebrew.", hebrewTitle]; // 属性指定なしのテキスト(文頭がヘブライ語) NSAttributedString *normalText = [[NSAttributedString alloc] initWithString:text]; NSMutableAttributedString *bidiText = normalText.mutableCopy; // ヘブライ語は右から左 NSRange hebrewRange = [bidiText.string rangeOfString:hebrewTitle]; [bidiText addAttribute:NSWritingDirectionAttributeName value:@[@1] range:hebrewRange]; // 文章全体は左から右 [bidiText addAttribute:NSWritingDirectionAttributeName value:@[@0] range:NSMakeRange(0, bidiText.length)];
上記の例を表示した結果が、図12となります。
NSVerticalGlyphFormAttributeName
縦書き用グリフを指定するためのNSNumberオブジェクトです。0が横書き、1が縦書きを意味しますが、iOSでは常に横書きが用いられ、0以外の値は無視されます。
連載バックナンバー
Think ITメルマガ会員登録受付中
Think ITでは、技術情報が詰まったメールマガジン「Think IT Weekly」の配信サービスを提供しています。メルマガ会員登録を済ませれば、メルマガだけでなく、さまざまな限定特典を入手できるようになります。