ios rotation uitextview transform cgaffinetransform

ios - Aplicar la transformación a UITextView: evitar el cambio de tamaño del contenido



rotation cgaffinetransform (2)

¿Has intentado aplicar la rotación haciendo una transformación de capa en lugar de una transformación en la vista?

#import <QuartzCore/QuartzCore.h> mytextField.layer.transform = CATransform3DMakeRotation (angle, 0, 0, 1);

Esto podría ser suficiente para engañar a cualquier lógica rota dentro del código del campo de texto central.

Cuando aplico una transformación de rotación a una UITextView y luego UITextView clic en el interior para comenzar a editar, parece que el tamaño del contenido se está ampliando automáticamente. El nuevo ancho de la vista de contenido es el ancho del cuadro delimitador de la vista girada. Por ejemplo, dado un cuadro de texto de ancho 500 y alto 400, y rotado por 30 grados, el nuevo ancho del contenido sería:

(500 * cos(30)) + (400 * sin(30)) = 633

O gráficamente

Curiosamente, si ya está editando la vista de texto y luego aplica la transformación, entonces parece que no se modifica el tamaño del contenido. Por lo tanto, parece que en algún momento alrededor del comienzo de la edición de texto, la vista de texto observa su propiedad de frame y ajusta el tamaño del contenido en función del ancho del marco. Me imagino que la solución a esto es decirle que use la propiedad de bounds lugar, sin embargo, no sé dónde hacerlo, ya que no estoy seguro de dónde está decidiendo modificar el tamaño del contenido la vista de texto.

He buscado en Google pero parece que no puedo encontrar ninguna referencia al uso de UITextViews transformadas. ¿Alguien tiene alguna idea sobre esto?

EDITAR (acción del botón del proyecto de prueba):

- (IBAction)rotateButtonTapped:(id)sender { if (CGAffineTransformIsIdentity(self.textView.transform)) { self.textView.transform = CGAffineTransformMakeRotation(30.0 * M_PI / 180.0); } else { self.textView.transform = CGAffineTransformIdentity; } NSLog(@"contentsize: %.0f, %.0f", textView.contentSize.width, textView.contentSize.height); }


Yo también estaba atascado con este problema.

La única solución que encontré fue crear una instancia de UIView y agregar el UITextView como una subvista. Luego puede rotar la instancia de UIView y UITextView funcionará perfectamente.

UITextView *myTextView = [[UITextView alloc] init]; [myTextView setFrame:CGRectMake(0, 0, 100, 100)]; UIView *myRotateView = [[UIView alloc] init]; [myRotateView setFrame:CGRectMake(20, 20, 100, 100)]; [myRotateView setBackgroundColor:[UIColor clearColor]]; [myRotateView addSubview:myTextView]; myRotateView.transform = CGAffineTransformMakeRotation(0.8); [[self view] addSubview:myRotateView];