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
porUIVerticalTextView
? 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:
- ¿Las vistas giradas son compatibles con el diseño automático?
- Girar una vista en layoutSubviews Esto en realidad tiene una solución funcional ahora. Sin embargo, básicamente implica apilar tres vistas una encima de la otra. Todavía preferiría crear una subclase UIScrollView personalizada que use TextKit como lo presenté en mi pregunta actual.
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?