2011-12-19 18 views
17

En TwUI, hay un método llamado redraw en TUIView. Obliga a la vista a volver a dibujarse, pero también incluye una animación de desvanecimiento libre entre el estado antiguo y el nuevo de la vista.¿Volver a dibujar un UIView con una animación de desvanecimiento?

Me pregunto si algo así es posible en un UIView normal. Básicamente, ¿cómo puedo volver a dibujar la vista (setNeedsDisplay) con una animación difuminada entre los estados antiguo y nuevo?

+0

Esta pregunta es similar, pero no es lo que estoy buscando: http://stackoverflow.com/questions/4730110/i-want-to-animate-in-fact-fade-within-drawrect –

+0

¿Qué necesitas ser diferente de esa otra pregunta? –

+0

Esa pregunta solo parece responder al desvanecimiento en una vista, no al actualizar una vista con una transición de desvanecimiento. –

Respuesta

38

Uso +[UIView transitionWithView:duration:options:animations:completion:] con la opción UIViewAnimationOptionTransitionCrossDissolve, y dentro del bloque de animación, la fuerza de la capa de la vista para volver a trazar su contenido inmediatamente.

[myView setNeedsDisplay]; 
[UIView transitionWithView:myView duration:1 
    options:UIViewAnimationOptionTransitionCrossDissolve 
    animations:^{ 
     [myView.layer displayIfNeeded]; 
    } completion:nil]; 
+1

¡Eres el hombre! Funcionó perfectamente Realmente debería repasar mi Animación Core, ¿no es así? –

+0

Ja ja, tal vez. Aprendí un * lote * del video * [Core Animation Essentials] (https://developer.apple.com/videos/wwdc/2011/#core-animation-essentials) * de WWDC 2011. Pero para su pregunta también Tuve que escribir un pequeño programa de prueba que cambiaba la propiedad del contenido de un CALayer creado por código y ver qué animación adjuntaba. –

+0

Gracias por ese enlace, lo veré alguna vez. También compré el libro * Core Animation * de Zarra & Long, pero me da vergüenza decir que aún no lo he leído. ¡Es hora de tomar un descanso de lectura! :) –

1

¿Qué le parece usar una transición UIView de disolución cruzada?

[UIView transitionWithView:aView 
        duration:TIME_INTERVAL 
        options:UIViewAnimationOptionTransitionCrossDissolve 
       animations:^{ 
        // Change the view's state 
       } 
       completion:^(BOOL finished) { 
        // Completion block 
       }]; 
Cuestiones relacionadas