属性付きテキストによるテキストの装飾(後編)

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

NSWritingDirectionAttributeName(iOS 7以降)

テキストの方向を指定するためのNSNumber(int)を含むNSArrayオブジェクトです。
テキストの方向は、0から3までの値で示します。
なお、この値はUnicodeの双方向アルゴリズム(Unicode Bidirectional Algorithm)における制御文字と同等の意味を持ちます。

[表4] NSWritingDirectionAttributeNameに指定する値と意味

Unicode制御文字 定義
0 LRE NSWritingDirectionLeftToRight | NSTextWritingDirectionEmbedding
1 RLE NSWritingDirectionRightToLeft | NSTextWritingDirectionEmbedding
2 LRO NSWritingDirectionLeftToRight | NSTextWritingDirectionOverride
3 RLO NSWritingDirectionRightToLeft | NSTextWritingDirectionOverride

NSWritingDirectionLeftToRightは左から右、NSWritingDirectionRightToLeftは右から左への書式方向を示します。また、NSTextWritingDirectionEmbeddingは単語単位で指定の方向へ表記するのに対し、NSTextWritingDirectionOverrideは文字をすべて指定の方向に表記します。

この属性は、日本語や英語などの左から右に表記する言語と、ヘブライ語やアラビア語など右から左に表記する言語が混在する際に、表記する方向を明示的に指定するために使用できます。
例えば、ヘブライ語と英語が混在しているテキストでは、先頭にヘブライ語があると、それに続く英語部分が、ヘブライ語の左にきてしまいます。これを防ぐために、NSWritingDirectionAttributeName属性を使用して、文章全体は左から右への書式であることを明確にする必要があります。

[ソースコード30] 書式方向の指定

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となります。

図12: 方向指定なし(上)と方向指定あり(下)

NSVerticalGlyphFormAttributeName

縦書き用グリフを指定するためのNSNumberオブジェクトです。0が横書き、1が縦書きを意味しますが、iOSでは常に横書きが用いられ、0以外の値は無視されます。

この記事のもとになった書籍
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メルマガ会員のサービス内容を見る

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