2012-05-15 10 views
5

Ich versuche, eine Animation zum Zusammenklappen einer Ansicht, die einige Unteransichten enthält.iOS animiert eine Ansicht einschließlich Unteransichten

[UIView beginAnimations:@"advancedAnimations" context:nil]; 
[UIView setAnimationDuration:3.0]; 

CGRect aFrame = aView.frame; 
aView.size.height = 0; 
aView.frame = aFrame; 

[UIView commitAnimations]; 

Diese Animation geht gut, aber nur für die aView. Subviews kollabieren nicht wie erwartet. Wie mache ich die Subviews zusammenbrechen? Gibt es außerdem eine Möglichkeit, die ursprüngliche Größe nach dem Zusammenfalten neu zu berechnen?

THX

Antwort

5

Sie haben wahrscheinlich vergessen, eine Autoresizing-Maske auf Ihre Unteransichten anzuwenden. Wenn Sie das tun

for (UIView *subview in aView.subviews) { 
    subview.autoresizingMask = (UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleBottomMargin | UIViewAutoresizingFlexibleTopMargin); 
} 

sollte es funktionieren.

BUT, persönlich würde ich, wie Lamelas

sagte
aView.transform = CGAffineTransformMakeScale(1.0,0.0); 
+0

Immer noch gut, aber die Sache, die ich machen möchte, ist, die Ansicht zu reduzieren und ihren Inhalt zu verstecken, wenn sie kleiner wird. CGAffineTransformMakeScale skaliert den gesamten Inhalt. BTW, Sie können 0.0 nicht in Transformationen verwenden. – toppless

+0

Wo haben Sie gesehen, dass wir 0.0 in Transformationen nicht verwenden können? Wie auch immer, ich bin mir nicht sicher, was deine Frage ist ... Möchtest du, dass deine Subviews skaliert werden, oder du möchtest, dass sie während der Animation abgeschnitten werden? – Zoleas

+0

Versuchen Sie es auf 0.0 einzustellen und schauen Sie, wie die Animation aussehen wird, und vergleichen Sie sie mit der Einstellung 0.001. Ich bin dabei, die Unteransichten nicht zu verkleinern, sondern einen "Slide Door" -Effekt zu haben, da die Hauptansicht kleiner wird. – toppless

4

Versuchen Sie, diese zu animieren mit:

aView.transform = CGAffineTransformMakeScale(1.0,0.0); 
+0

+1 Das ist oh so viel schöner. – Caleb

+0

Funktioniert besser, aber die Animation ist ein bisschen seltsam - versucht, die Ansicht in den Mittelpunkt "zu drücken". – toppless

0

eine Vermutung:

[UIView beginAnimations:@"advancedAnimations" context:nil]; 
[UIView setAnimationDuration:3.0]; 

CGRect aFrame = aView.frame; 
aView.size.height = 0; 
aView.frame = aFrame; 

for (UIView *subview in aView.subviews) { 
    CGRect frame = subview.frame; 
    frame.size.height = 0; 
    subview.frame = frame; 
} 

[UIView commitAnimations]; 

Darüber hinaus ist es eine Möglichkeit, Originalgröße neu zu berechnen nach einem Zusammenbruch?

Sie möchten wahrscheinlich nur die Höhe speichern, bevor Sie kollabieren.

Verwandte Themen