タイトルに基づいてこの質問に来たが、モンゴル語に興味がない場合は、代わりにこの Q&A を探している可能性があります。
伝統的なモンゴル語の iOS アプリを開発するために Swift を学習しています。問題は、伝統的なモンゴル語が上から下、左から右に縦に書かれていることです。私の質問は、テキストを垂直に表示し、行の折り返しが機能するようにするにはどうすればよいですか?
1 分間お付き合いいただければ、問題をより明確に説明できるように努めます。以下は、私が達成したいテキストビューの種類の画像です。外国語のスクリプトにうんざりした場合に備えて、同じパターンに沿った英語のテキストを含めました。実際、アプリに表示する英語のテキストがある場合は、このように表示されます。
単純な 1 行の UILabel の場合、時計回りに 90 度回転すると機能します。ただし、複数行の UITextView の場合、行の折り返しを処理する必要があります。単純に 90 度回転させると、最初に書かれたものが最後の行になってしまいます。
これまでのところ、この問題を克服できると思われる計画を立てました。
- すべての文字が垂直方向に反転するカスタム フォントを作成します。
- テキスト ビューを時計回りに 90 度回転します。
- テキスト ビューを水平方向にミラーリングします。
これでテキストの折り返しが処理されます。
ミラーフォントができます。ただし、UITextView の回転とミラーリングのために Swift コーディングを行う方法がわかりません。ソリューションの一部にヒントを与えると思われる次のリンクを見つけましたが、それらはすべて Objective C にあり、Swift にはありません。
アプリ ストアには伝統的なモンゴル語のアプリ (これやこれなど) がありますが、ソース コードを共有している人をまだ見つけていないため、テキストを表示するために舞台裏で何をしているのかわかりません。伝統的なモンゴル語を読む数百万人の人々のためのアプリを開発するのが将来、それほど難しくないように、私は自分のコードをオープンソースにするつもりです。私だけでなく、モンゴルの人々も、この努力にあなたが与えることができるどんな支援も大いに感謝します. 自分のことを知らない場合でも、この質問に賛成票を投じて、より目立つようにすることが役立ちます.
アップデート
@sangonzの答えはまだ素晴らしい答えですが、すべてを機能させることができなかったため、受け入れられた答えとして一時的にマークを外しました。具体的には:
- スクロールを有効にする (スクロールビューにカスタム ビューを埋め込むか、UIScrollView をサブクラス化することにより)。github プロジェクトで、@sangonz はこれは簡単なはずだと言いましたが、私には合いませんでした。
- 向きの変更時にワード ラインの (ストレッチではなく) 再レイアウトを取得します。これは、もう少し研究すれば解決するのはそれほど難しいことではないと思います。
- テキスト行がビューの端まで届かないのはなぜですか? 底に大きな隙間があります。
カスタム垂直ビューの NSTextStorage を他の UITextView からリンク解除する方法。(この質問を参照してください)
この時点まで、私は上で提案した元の方法を使用してきましたが、私が本当に望んでいるのは、@sangonz が提案したようなものを機能させることです。
私は現在、次のような代替方法も検討しています
- Core Text の使用, 短所: 車輪の再発明のように感じる
- WebKit の使用、欠点: Apple は WebKit を使用しなくなりました。
UITextView