2010-07-31 17 views
8

En una aplicación que muestra trozos de texto, el tamaño de fuente aumenta cuando el dispositivo cambia a orientación horizontal. No me gusta cómo funciona toda la animación y de repente salta al nuevo tamaño, por lo que me gustaría animar el cambio de tamaño en el transcurso de la rotación.iOS: ¿se está animando el cambio de tamaño de texto en UILabel o UITextView?

Leí en alguna parte que lanzar este cambio en un bloque de animación UIView no funciona porque la propiedad de fuente no es animable, entonces, ¿cuáles son mis opciones para hacer esto?

Para mi implementación específica no estoy simplemente escalando el UILabel/UITextView como está; Los límites del cuadro aumentan más (proporcionalmente) que el tamaño de fuente, por lo que habrá un nuevo flujo en el texto. Eso está bien para mi.

Editar: Estaría bien con simplemente escalar el UITextView.

Además, estaba considerando "animar" manualmente: Tengo un método que establece mis puntos de vista y se ajusta para el tamaño de la fuente. Si supiera cuándo está a punto de comenzar la rotación y la duración de la animación, podré cronometrarla para que tenga un tamaño de fuente intermedio o dos en el medio de la animación. Cualquier ayuda para obtenerlos sería apreciada.

+1

¿Ha logrado lograr lo que quería hacer? ¿Podría aceptar una de las respuestas para cerrar la pregunta? – MiKL

Respuesta

6

Si supiera cuando la rotación estaba a punto para empezar, y la duración de la animación ...

Es curioso que lo menciones. Justo antes de que comience la animación, su controlador de vista recibirá un mensaje willAnimateRotationToInterfaceOrientation:duration: que le brinda la información exacta que necesita.

1

Cambia el tamaño de fuente cuando se llama didAnimateFirstHalfOfRotationToInterfaceOrientation:. De esta forma, el usuario no verá el cambio una vez que se complete la rotación. ¡Sería bastante difícil ver el cambio de tamaño de letra, ya que la rotación está sucediendo!

+0

Ese método no se invoca a menos que active la animación en dos pasos, lo que requiere cosas manuales adicionales que realmente deseo evitar. ¡Pero buena idea de todos modos! – kbanman

6

Una opción es atenuar el texto anterior, cambiar el tamaño de la fuente y volver a fundirla. La propiedad de la fuente puede no ser animable, pero alfa es. Como alfa es una propiedad de UIView, puede tratar todas las vistas que contienen texto de la misma manera: UILabel, UITextView, etc. También se ve bien.

+0

Me gusta este método. – Moshe

4

Una manera de proceder podría ser:

  1. Crear una CAKeyframeAnimation
  2. Definir la escala y la rotación que quiere lograr durante ese animación utilizando un conjunto de CATransform3D objetos
  3. Añadir estas transformadas a su animación con fotograma clave
  4. Envíe el mensaje addAnimation a su objeto de capa de etiqueta: [[label layer] addAnimation];

aquí sería un ejemplo de código asumiendo yourLabel es el UILabel desea escalar y rotar:

CAKeyframeAnimation *scale = [CAKeyframeAnimation animationWithKeyPath:@"transform"]; 

CATransform3D scaleUp = CATransform3DMakeScale(1.5, 1.5, 1); // Scale in x and y 
CATransform3D rotationScaled = CATransform3DRotate (scaleUp, 90, 0, 0, 1); // Rotate the scaled font 

[scale setValues:[NSArray arrayWithObjects: 
[NSValue valueWithCATransform3D:CATransform3DIdentity], 
[NSValue valueWithCATransform3D:rotationScaled], 
nil]]; 

// set the duration 
[scale setDuration: 1.0]; 

// animate your label layer 
[[yourLabel layer] addAnimation:scale forKey:@"scaleText"]; 

Esto es típicamente cómo se animó un texto rebotando por ejemplo.

Puede iniciar esto cuando el dispositivo comience a girar y recuperar la animación cuando esté rotada para que pueda actualizar su etiqueta con la escala/posición adecuada.

Tendrá que sintonizar para encontrar la sincronización y la rotación adecuadas.

+0

@kelso. ¿Le has dado un pensamiento/intento? – MiKL

+0

Para obtener el tiempo correcto y la rotación correcta, puede usar el método descrito anteriormente: 'willAnimateRotationToInterfaceOrientation: duration:' – MiKL

+0

@ kelso.b. ¿Alguna vez lograste hacer lo que querías lograr? ¿Qué hay de aceptar una de las respuestas para que su pregunta se cierre? Aclamaciones. Mikl – MiKL

Cuestiones relacionadas