2009-11-13 6 views
8

He estado tratando de encontrar una forma decente para animar sin problemas un cambio de tamaño de fotograma en un UILabel, sin un extraño reinicio de salto inicial. Lo que pasa por defecto es que cuando hago algo como esto:Marco de animación de UILabel sin problemas

// Assume myLabel frame starts as (0, 0, 100, 200) 
[UIView beginAnimations:@"myAnim" context:NULL]; 
[UIView setAnimationBeginsFromCurrentState:YES]; 
[UIView setAnimationCurve:UIViewAnimationCurveLinear]; 
[UIView setAnimationDuration:1.0]; 
myLabel.frame = CGRectMake(0.0, 0.0, 50, 100); 
[UIView commitAnimations]; 

consigo una animación fluida con la etiqueta, embargo la forma en que lo hace es que toma la capa de imagen vuelve a dibujar para el tamaño de destino de la etiqueta y estira el contenido para que se ajuste a la corriente y luego se anima al rect de destino. Esto termina con un salto muy extraño en la pantalla de texto. Aquí hay dos imágenes que muestran el aspecto pre-animación, y luego justo después comienza la animación:

Pre-Animación

Post-Animación

he tratado de usar sólo el capa para animar esto, pero todavía tengo los mismos problemas.

Entonces la pregunta es, ¿cómo puedo evitar esto?

Gracias por cualquier ayuda,
de Scott

+0

Es una vieja pregunta, pero estoy lucha con exactamente el mismo problema. De alguna manera es ilógico. Según entiendo los métodos de animación, deberías poder animar la mayoría de las propiedades en una clase UIView. Pero ¿por qué la propiedad de marco de un UILabel se comporta de manera diferente cuando se anima que una subclase UIView normal? Parece que la clase UILabel está ignorando la animación para el tamaño y solo anima el cambio de ubicación. Lo cual crea una animación bastante extraña. Agradecería si alguien pudiera ayudarme con esto. – Chris

Respuesta

0

Animación de que la trama no animar cambiar el tamaño de la fuente. Si entiendo qué comportamiento está viendo, creo que tiene la etiqueta adjustsFontSizeToFitWidth establecida en 'Verdadero', por lo que verá el cuadro animado al tamaño seguido del reajuste instantáneo del tamaño de la fuente.

Puede intentar escalar la transformación de la etiqueta para que el marco y la escala de la fuente estén simultáneamente.

+0

En realidad no, este no es el caso. El adjustFontSizeToFitWidth no está establecido aquí y en realidad * no * estoy intentando cambiar el tamaño de la fuente, solo el marco, que está en amarillo. Sin embargo, lo que sucede es que el marco de destino (en este caso) "se ajusta" al texto, por lo que primero vuelve a dibujar esa capa que se extiende para ajustarse al marco original, y luego lo reduce. Es por eso que se ve raro así. –

+0

no estoy seguro entonces. Es un problema interesante Veré si no puedo reproducirlo más tarde hoy. Tengo curiosidad por mí mismo. – TechZen

30

Hooray por responder a una pregunta de hace dos años, pero encontré la respuesta. Ya sea en Interface Builder o en código, cambie la propiedad contentMode de la etiqueta. El tuyo parece estar configurado en scaleToFill; intente left o right.

+1

¡Si pudiera, subiría esta respuesta con 100! (Todavía salta a veces, pero está bien) – Ariel

+0

¡Esto no me funciona! –

+0

TopLeft/Right o BottomLeft/Right podría ser el modo de contenido correcto que desee dependiendo de la animación exacta que necesite. – CedricSoubrie

7

Para ampliar la respuesta de @ cliclcly: A partir de la lista de publicaciones de UILabel: Modo de contenido

El valor por defecto de la clase UILabel es UIViewContentModeRedraw. Este modo hace que la vista vuelva a dibujar su contenido cada vez que cambia su rectángulo delimitador. Puede cambiar este modo modificando la propiedad contentMode heredada de la clase .

De la documentación de la propiedad contentMode de UIView:

El valor predeterminado de esta propiedad es UIViewContentModeScaleToFill.

UILabels se comportan de forma diferente que otras UIView de forma predeterminada porque su propiedad contentMode es diferente de manera predeterminada.

-3

Simplemente desactive el diseño automático para su etiqueta.

En Xcode, haga clic en la etiqueta y luego en el panel de propiedades, anule la selección de la opción de diseño automático

5

encontré que animaciones de cuadros UILabel son raros - su tamaño se establece inmediatamente al tamaño final y el el texto se representa para ese tamaño. Después de eso, solo el cambio de posición está animado, lo que significa que si el tamaño de destino es (0,0), la etiqueta desaparece inmediatamente. Para eludir esta limitación, coloqué la etiqueta dentro de una vista del mismo tamaño que recorta las subvistas, desactivé el aumento de tamaño para la etiqueta y estoy animando la supervista de la etiqueta en lugar de la propia etiqueta. El resultado final es que el marco de la etiqueta está completamente animado, pero el texto contenido no se vuelve a procesar con, por ejemplo, un tamaño de letra diferente ni se modifica el truncamiento del texto. Todavía no es perfecto, pero es adecuado para mi propósito.

marco inicial:

initial frame

Durante la animación:

During animation

Animación terminó:

Animation ended

+0

No puedo creer, creo que nunca supe esto de UILabels. Pero me ayudaste a resolver un problema que me dejó totalmente perplejo, ¡gracias! – Echelon

Cuestiones relacionadas