2011-10-29 9 views
8

Ho problemi a animare la scala di una vista a zero. Qui è il mio codice:Ridimensiona scala UIView a zero

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

}]; 

Per qualche ragione, la vista spazia e stringe in senso orizzontale come il vecchio televisore a tubo spegnimento. Se eseguo la scala su (0.1, 0.1), essa viene ridimensionata correttamente, ma ovviamente non fino a zero.

Perché sta succedendo?

+0

Ho ancora lo stesso problema, hai trovato una soluzione? –

risposta

4

Prova:

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

Oppure centre.x, centre.y per sparire al punto centrale – jrturton

+2

Grazie, ma voglio davvero usare la trasformazione se possibile. La gerarchia dei contenuti della vista è piuttosto complessa e dovrò passare attraverso la proprietà della maschera di autoresizing di ciascuna sottoview per ridimensionarla correttamente. – pixelfreak

+0

Questo non funziona se hai modificato il punto di ancoraggio – mhillsman

2

favore usa:

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

Penso che tu intendessi 'myView.transform'. – Webdevotion

+0

Impossibile animare a (0.0, 0.0) per la trasformazione della scala –

7

Se qualcuno è ancora interessato, ecco quello che ho fatto (a Swift) per farlo funzionare (quasi):

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

Se la durata è breve, non si vede che non è in scala esattamente a 0 e si dissolve in modo efficace.

1

Nel caso in cui qualcuno stia ancora avendo questo problema, il problema sta nel fatto che la matrice di trasformazione affine non è univoca per un fattore di scala pari a zero - non c'è modo di sapere come interpolare "correttamente" tra la matrice iniziale e lo zero matrice, quindi ottieni effetti strani come hai descritto.

La soluzione consiste semplicemente nell'utilizzare un valore di scala piccolo ma diverso da zero, ad es.

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