2011-10-29 16 views
8

Mam problem z animacją skali widoku do zera. Oto mój kod:Animacja skali UIView do zera

[UIView animateWithDuration:0.3 animations:^{ 
    myView.transform = CGAffineTransformMakeScale(0.0, 0.0); 
} completion:^(BOOL finished){ 

}]; 

Z jakiegoś powodu widok rozciąga się i ściska poziomo, jak stara lampka TV wyłącza się. Jeśli zamiast tego ustawię skalę na (0.1, 0.1), to będzie ona poprawnie skalowana, ale oczywiście nie będzie równa zeru.

Dlaczego tak się dzieje?

+0

Nadal mam ten sam problem, czy znalazłeś rozwiązanie? –

Odpowiedz

4

Spróbuj:

[UIView animateWithDuration:0.3 animations:^{ 
    myView.frame = CGRectMake(myView.origin.x, myView.origin.y, 0.0, 0.0); 
} completion:^(BOOL finished){ 
}]; 
+0

Lub centre.x, centre.y znikają do punktu centralnego – jrturton

+2

Dzięki, ale naprawdę chcę użyć transformacji, jeśli to możliwe. Hierarchia zawartości widoku jest dość skomplikowana i będę musiała przejść przez właściwość maski autoregulacji każdej z subskrybowanych, aby odpowiednio zmienić jej rozmiar. – pixelfreak

+0

To nie działa, jeśli zmodyfikowano punkt kontrolny – mhillsman

2

użyj:

myView.layer.transform = CGAffineTransformMakeScale(0.0, 0.0); 
+2

Myślę, że chodziło o 'mójView.transform'. – Webdevotion

+0

Nie można animować do (0,0, 0,0) dla transformacji skali –

7

Jeśli ktoś nadal jest zainteresowany, oto co zrobiłem (Swift), aby to działało (prawie):

UIView.animateWithDuration(1, animations: { 
    myView.transform = CGAffineTransformMakeScale(0.01, 0.01) 
}, completion: nil) 

Jeśli czas trwania jest krótki, nie widzisz, że nie skaluje się dokładnie do 0 i skutecznie zanika.

1

Jeśli ktoś nadal ma tę kwestię, problem leży w tym, że macierz transformacji afinicznej nie jest unikatowa dla współczynnika skalowania równego zero - nie ma sposobu, aby wiedzieć, jak interpolować "poprawnie" między początkową macierzą a zerą macierz, więc otrzymasz dziwne efekty, jak opisałeś.

Rozwiązaniem jest po prostu użycie małej, ale niezerowej wartości skali, np.

[UIView animateWithDuration:0.3 
       animations:^{ myView.transform = CGAffineTransformMakeScale(0.01, 0.01); } 
       completion:nil];