2011-12-19 19 views
17

W TwUI istnieje metoda o nazwie redraw na TUIView. Zmusza widok do przerysowania, ale zawiera także wolną zanikającą animację pomiędzy starym i nowym stanem widoku.Przerysowywanie UIView z animacją zanikania?

Zastanawiam się, czy coś takiego jest możliwe w normalnym UIView. Zasadniczo, jak mogę przerysować widok (setNeedsDisplay) z zanikającą animacją między starym a nowym stanem?

+0

To pytanie jest podobny, ale nie całkiem to, czego szukam: http://stackoverflow.com/questions/4730110/i-want-to-animate-in-fact-fade-within-drawrect –

+0

Co należy odróżnić od tego innego pytania? –

+0

Pytanie to tylko wydaje się odpowiadać na zanikanie w widoku, nie aktualizując widoku z przejściem przejścia. –

Odpowiedz

38

Zastosowanie +[UIView transitionWithView:duration:options:animations:completion:] z możliwością UIViewAnimationOptionTransitionCrossDissolve i w bloku animacji siłę warstwę Widoku bezpośrednio do przerysowania do jego zawartości.

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

Jesteś mężczyzną! Działa doskonale. Naprawdę powinienem odświeżyć moją Core Animation, czyż nie? –

+0

Ha ha, być może. Nauczyłem się * udziału * z filmu * [Core Animation Essentials] (https://developer.apple.com/videos/wwdc/2011/#core-animation-essentials) * wideo z WWDC 2011. Ale na twoje pytanie również musiał napisać mały program testowy, który zmienił właściwość treści stworzonego przez kod CALayer i zobaczył, jakie animacje do niego dołączono. –

+0

Dzięki za ten link, kiedyś to obejrzę. Kupiłem też książkę * Core Animation * autorstwa Zarry i Longa, ale wstydzę się powiedzieć, że jeszcze jej nie przeczytałem. Czas na przerwę w czytaniu! :) –

1

Co powiesz na użycie przejścia UIView z funkcją "cross-dissolve"?

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