2011-12-21 8 views
7

Mam UIView, który zawiera dwa subviews. Chciałbym zmienić rozmiar ramki widoku z animacją i zmienić rozmiary subskrybentów zgodnie z maskami autoreize.Animowana zmiana rozmiaru ramki UIV z autorezjowaniem subviews

[UIView beginAnimations:@"Resize" context:nil]; 
[UIView setAnimationDuration:1.0]; 
CGRect frame = self.myView.frame; 
frame.size.height += 30.0; 
self.myView.frame = frame; 
[UIView commitAnimations]; 

Widok self.myView jest zmieniany w ciągu 1 sekundy, jak oczekiwano, ale subviews natychmiast rozmiaru. Czy ktokolwiek wie, dlaczego tak się dzieje i w jaki sposób mogę sprawić, by subviews animowały także ich zmiany rozmiaru?

Z mojego wyszukiwania google, myślę, że może mieć coś wspólnego z właściwością contentMode. Niestety, nie bardzo wiem, co robi ta nieruchomość. Każda pomoc byłaby bardzo cenna.

Odpowiedz

1

OK, więc zorientowali się problem po przeczytaniu odpowiedzi na następujące pytanie: Animating a UIView frame, subview UIScrollView doesn't always animate

I w zasadzie robił jakąś pracę po tym, jak zaplanowano animację który powodował - layoutSubviews się nazywać na każdym z moich subviews który automatycznie spowodował, że te widoki zostały ustawione w punkcie końcowym animacji. Po zaplanowaniu mojej animacji po wykonaniu tej pracy udało mi się rozwiązać mój problem.

14

Byłoby trudno, aby ktoś inny podał poprawną odpowiedź bez oglądania kodu, mimo że zapytałbym Cię, co robisz po [UIView commitAnimations]. Niemniej cieszę się, że to wymyśliłeś. Proponuję użyć animacji bloku. Sprawiają, że ten typ błędu jest znacznie łatwiejszy do uniknięcia poprzez użycie bloku ukończenia. Przykład:

[UIView animateWithDuration:1.0 
       animations:^{ 
        CGRect frame = self.myView.frame; 
        frame.size.height += 30.0; 
        self.myView.frame = frame; 
       } 
       completion:^(BOOL finished){ 
        // whatever you need to do when animations are complete 
       }]; 
+0

Niestety, konieczność kompatybilności ze starszymi wersjami iOS wyklucza animacje blokowe. Dzięki za napiwek. – jjoelson

+1

ma sens. chociaż zainstalowana baza <4.x jest obecnie dość mała. – XJones