2013-05-22 10 views
6

Próbuję wykonać animację UIView, w której obraz zaczyna się w lewym górnym rogu ekranu i rozwija się do pierwotnego rozmiaru i miejsca na środku ekranu. Do tej pory udało mi się zrobić to osobno, ale kiedy spróbuję połączyć te animacje, zrobię tylko animację skali.Jak połączyć skalowanie i animację tłumaczenia

Czy istnieje sposób, aby wykonać tę pracę z Skala i tłumaczenie w tym samym czasie?

Oto co mam do tej pory:

CGAffineTransform setpointTrans = CGAffineTransformMakeTranslation(-200.0f, -200.0f); 
CGAffineTransform setpointScale = CGAffineTransformMakeScale(0.0f, 0.0f); 
_RSEImage.transform = CGAffineTransformConcat(setpointTrans, setpointScale); 
[UIView beginAnimations:nil context:nil]; 
[UIView setAnimationDelegate:self]; 
[UIView setAnimationDuration:5]; 
[UIView setAnimationCurve:UIViewAnimationCurveEaseOut]; 
CGAffineTransform scaleTrans = CGAffineTransformMakeScale(1.0f, 1.0f); 
CGAffineTransform lefttorightTrans = CGAffineTransformMakeTranslation(0.0f,0.0f); 
_RSEImage.transform = CGAffineTransformConcat(scaleTrans, lefttorightTrans); 
[UIView commitAnimations]; 

Ok ja zorientowaliśmy się, o to co zmieniłem:

_RSEImage.transform = CGAffineTransformMakeScale(0.0f, 0.0f); 
[UIView beginAnimations:nil context:nil]; 
[UIView setAnimationDelegate:self]; 
[UIView setAnimationDuration:5]; 
[UIView setAnimationCurve:UIViewAnimationCurveEaseOut]; 
CGAffineTransform scaleTrans = CGAffineTransformMakeScale(1.0f, 1.0f); 
CGAffineTransform lefttorightTrans = CGAffineTransformMakeTranslation(200.0f,200.0f); 
_RSEImage.transform = CGAffineTransformConcat(scaleTrans, lefttorightTrans); 
[UIView commitAnimations]; 
+0

Wypróbowałem twój kod i idealnie robi to, co chciałbyś osiągnąć: skalowanie i tłumaczenie ... Jaki jest punkt źródłowy RESImage przed tym kodem? – nzs

+0

x 160 y 242, domyślam się, że to, o co pytasz, przepraszam, to moja pierwsza aplikacja na iPhone'a. Rozmiar obrazu to 161 x 71 –

+0

Trudno powiedzieć z tego kodu, gdzie masz problem, ponieważ w zasadzie ten fragment kodu działa, jest to sposób, w jaki robisz transformację afiniczną "scalając". Więc myślę, że jakaś inna część twojego kodu uniemożliwia jakoś tłumaczenie lub nie jest widoczna ... Zacznij dodawać funkcje stopniowo, komentując rzeczy i sprawdzaj, że do tego momentu wszystko wygląda dobrze. Na przykład. sprawdź ten fragment dla pierwszych 3 linii ze skalą 0.3f i -100f - widzisz img? następnie dodaj tylko tłumaczenie, aby przetestować parametry, a następnie scal ze skalą. Możesz również użyć mojej odpowiedzi, ponieważ bloki są łatwiejsze. – nzs

Odpowiedz

2

Można to wykorzystać, bloki animacji, także (od iOS4):

[UIView animateWithDuration: 5 
         delay: 0 
        options: (UIViewAnimationOptionCurveLinear | UIViewAnimationOptionAllowUserInteraction) 
       animations:^{_RSEImage.center = CGPointMake(300, 300) ; _RSEImage.transform = CGAffineTransformScale(CGAffineTransformIdentity, 2.0, 2.0);} 
       completion:^(BOOL finished) { } 
]; 

właściwego oficjalnego doc tutaj: link

Przyjemny samouczek: link

Mam nadzieję, że pomoże!

+0

, który przeskalował obraz do dwukrotnie większej wielkości, nadal nie przesuwał obrazu z lewego górnego rogu do środka. –

+0

Sthing dziwne dzieje ... ;-) Jaki jest typ _RSEImage, można udostępnić kod, jak dodać do widoku? lub jakikolwiek inny kod związany z _RSEImage? – nzs

+0

Wymyśliłem to i zredagowałem moje pytanie, poznam te bloki, wydaje się dużo łatwiejsze. Dziękuję za pomoc. –