Как сделать вертикальный текст UILabel и UITextView для iOS в Swift?

Если вы пришли к этому вопросу, основываясь на названии, но не интересуетесь монгольским языком, вы можете вместо этого искать этот вопрос и ответ:

Swift: Как вы можете вращать текст для UIButton и UILabel?

Я изучал Swift, чтобы разрабатывать приложения для iOS длятрадиционный монгольский, Проблема в том, что традиционный монгольский написан вертикально сверху вниз и слева направо. У меня вопрос, как я могу отображать текст по вертикали и при этом работать с переносом строк?

Если вы останетесь со мной на минуту, я постараюсь объяснить проблему более четко. Ниже приведено изображение вида текста, который я хотел бы получить. В случае, если иностранный сценарий отбрасывает вас, я включил текст на английском языке, который следует той же схеме. На самом деле, если в приложении отображается текст на английском языке, это должно выглядеть так.

Для простой однострочной UILabel будет работать поворот на 90 градусов по часовой стрелке. Однако для многострочного UITextView мне нужно иметь дело с переносом строк. Если я просто сделаю простой поворот на 90 градусов, первое, что написано, окажется в последней строке.

Пока я составил план, который, я думаю, может решить эту проблему:

Создайте собственный шрифт, в котором все буквы будут отображаться вертикально.Поверните текстовое представление на 90 градусов по часовой стрелке.Зеркальное отображение текста по горизонтали.

Это должно заботиться о переносе текста.

Я могу сделать зеркальный шрифт. Однако я не знаю, как выполнить кодирование Swift для поворота и зеркального отображения UITextView. Я нашел следующие ссылки, которые, кажется, дают подсказки для частей решения, но все они в Objective C, а не в Swift.

Как вращать подвиды вокруг своих центров?Поверните UIView вокруг его центра, сохраняя его размерiOS: зеркальное отображение содержимого на экранеЗеркальное отображение UIView

В магазине приложений есть традиционные монгольские приложения (например,этот а такжеэтот) но я пока не нашел никого, кто бы делился своим исходным кодом, поэтому я не знаю, что они делают за кулисами для отображения текста. Я планирую сделать свой код открытым исходным кодом, чтобы в будущем другим было не сложно разрабатывать приложения для нескольких миллионов человек, которые читают традиционный монгольский язык. Любая помощь, которую вы можете оказать в этом начинании, будет высоко оценена не только мной, но и монгольским народом. Даже если вы сами не знаете, голосование по этому вопросу поможет сделать его более заметным.

Обновить

Ответ @ sangonz по-прежнему отличный ответ, но я временно пометил его как принятый, потому что просто не мог заставить все работать. В частности:

Включение прокрутки (путем встраивания пользовательского представления в представление прокрутки или путемнаследование UIScrollView). В проекте github @sangonz сказал, что это должно быть легко, но это было не для меня.Получение ретрансляции (а не растягивания) строк слова при изменении ориентации. Я думаю, что это не должно быть слишком сложно решить с небольшим количеством исследований.Почему текстовые строки не доходят до края представления? Внизу большой разрыв.Как отсоединить NSTextStorage пользовательского вертикального представления от другого UITextView. (увидетьэтот вопрос)

До этого моментаЯ использовал оригинальный метод Я предложил выше, но я действительно хочу получить что-то вроде того, что @sangonz предложил работать.

Я также сейчас рассматриваю альтернативные методы, такие как

Использование основного текстаНедостаток: похоже на изобретение колесаИспользование WebKitНедостаток: Apple больше не использует WebKit для своихUITextView

Ответы на вопрос(2)

Ваш ответ на вопрос