ios swift uiscrollview uitextview mongolian-vertical-script

ios - ¿Cómo hacer un UITextView vertical por subclasificación de UIScrollView en Swift?



mongolian-vertical-script (1)

Fondo

Soy nuevo en el desarrollo de iOS, pero para comenzar a crear incluso las aplicaciones más rudimentarias con el script vertical mongol, necesito tener un UITextView vertical. No he encontrado a ningún otro desarrollador de aplicaciones mongoles compartiendo su código, así que estoy intentando hacerlo yo mismo. El mongol se escribe de arriba a abajo y las líneas se ajustan de izquierda a derecha, como se ilustra en el siguiente gráfico:

El desplazamiento debe ser horizontal (de izquierda a derecha).

En una pregunta anterior , propuse una combinación de una fuente reflejada y una rotación y duplicación de la UITextView (porque eso es lo que había hecho en Android). Sin embargo, después de leer esta respuesta e investigar más a fondo la manera en que iOS hace las cosas (como usar TextKit ), creo que sería mejor crear algo como UIVerticalTextView desde cero en lugar de jugar con el UITextView normal. Y como veo que UITextView inheirits de UIScrollView , asumo que debería subclase UIScrollView para hacer UIVerticalTextView .

Donde estoy ahora

La respuesta que mencioné anteriormente subclasificó UIView pero tuve muchos problemas para que el desplazamiento funcionara. Esta es otra razón por la que quiero subclasificar UIScrollView . Además, esa solución no transmitió las palabras en cada línea cuando hubo un cambio de orientación.

He reunido las siguientes piezas, pero no estoy seguro de cómo unirlas:

  • NSTextStorage - No debería haber nada diferente con esto. Solo almacenará el texto Unicode de Mongolia y cualquier información de estilo.
  • NSTextContainer : la altura y el ancho deben cambiarse para dar el tamaño del contenedor de texto vertical. (De todos modos, creo que sí. A menos que esto se pueda hacer en otro lugar).
  • NSLayoutManager : ¿Se debe hacer algo especial aquí o está UIVerticalTextView por UIVerticalTextView ?
  • UIVerticalTextView : esta será una subclase de UIScrollView pero ¿cuáles son los métodos que se deben agregar y / o reemplazar?

    class UIVerticalTextView: UIScrollView { // Which properties to include? // - TextStorage // - TextContainer // - LayoutManager // which methods to override? // which methods to add to give minimal functionality like UITextView? // - init // = text }

Actualizaciones

Estas preguntas son intentos de dividir el problema en partes más pequeñas:

Y probando con un enfoque diferente:


Si tiene una fuente que muestre su texto, la forma más fácil sería utilizar el UITextView normal:

UITextView *textView = [[UITextView] alloc] init]; textView.transform = CGAffineTransformMakeRotation(-M_PI/2); textView.text = @"YOUR TEXT HERE"; [textView setBaseWritingDirection:UITextWritingDirectionRightToLeft forRange:[textView textRangeFromPosition:[textView beginningOfDocument] toPosition:[textView endOfDocument]]];

La vista de texto ahora se desplazará hacia la derecha, no hacia abajo, ¿asumo que se supone que debe suceder con el mongol?