2012-12-06 5 views
21

ich einen Blick von einem Postion zum anderen bewegen will, muss ich es umsetzen kannAnimieren/Moving Ansichten unter Verwendung von Automatische Anordnung

self.view.center = CGPointMake(100, 200); 

jedoch verwenden, wenn das Projekt Automatische Anordnung verwendet, dann wird die Ansicht wieder zur ursprünglichen Position nach dem Laufen:

[self.view.superview setNeedsLayout]; 

dann, wie man tatsächlich eine Ansicht zur neuen Position verschiebt?

Antwort

14

Sie müssen die Einschränkungen ändern, wenn Sie autoLayout verwenden. Die vorgeschlagene Methode besteht darin, in Ihrem View-Controller ein Outlet für die Integritätsregel zu erstellen. Anschließend ändern Sie die Konstante der Integritätsbedingung. Wenn Sie die Zeit haben, würde ich definitiv going here empfehlen und "Auto-Layout mit Beispiel" oder "Best Practices für das Mastering Auto-Layout" ansehen. Sie haben mir sehr geholfen. Ich denke, der Punkt, den Sie mitnehmen sollten, ist, dass Sie mit autoLayout nicht mehr in Frames denken. Das Einstellen des Centers funktioniert also nicht mit dem Auto-Layout. Es geht darum, wie Ansichten miteinander in Beziehung stehen.

+0

es klingt wie das mit automatischem Layout ist härter als Rahmen mit einer Ansicht zu bewegen, da ich alle Ausgänge dieser Ansicht erhalten sollte – user1687717

+0

Es ist schwieriger auf dem ersten, aber ich beginne es tatsächlich besser zu mögen.Sie können viel mehr damit tun –

+0

Zweite @ ClintWarner hier: Autolayout kann ein bisschen mehr Aufwand sein, um zunächst einzurichten, aber es zahlt sich sehr in Bezug auf Wartung und Lesbarkeit. Jetzt bin ich es gewohnt, Einschränkungen zu implementieren, die Arbeit mit Frame-Mathe scheint mühsam und frustrierend. – followben

31

Mit AutoLayout aktiviert ist, sollten wir FORGET FRAMES und nur CONSIDER CONSTRAINTS .Ja, zum Animieren können Sie auch nicht mehr den Rahmen ändern oder in der Mitte, wird nach Ansicht des in ihre ursprüngliche Position zurückkehren, wenn das Layout aufgerufen wird.

Stattdessen sollten Sie consider changing the constant value of the constraint, um den gleichen Effekt zu erhalten.

Betrachten Sie eine Benutzeroberfläche wie das Bild unten gegeben.Ich habe eine Bildansicht mit einer 20 points leading space from it's superview, was bedeutet, dass es eine horizontale Raumbeschränkung mit seiner superview.Auch habe ich drei weitere Einschränkungen an diese Bildansicht, oben, Breite und Höhe.

Ich werde Ihnen zeigen, wie wir das Bild von links nach rechts wie im Bild gezeigt animieren können.

Erstellen Sie IBOutlet's für die Constraint's, die wir animieren müssen. Hier nehmen wir nur horizontale Platzbeschränkungen, das reicht, um diese Ansicht von links nach rechts zu verschieben.

@property (weak, nonatomic) IBOutlet UIImageView *imageView; 
@property (weak, nonatomic) IBOutlet NSLayoutConstraint *horizontalSpaceConstraint; 

enter image description here

Innen Go Away Aktion, müssen wir den konstanten Wert von dieser Einschränkung aktualisieren.

- (IBAction)moveFrontAction:(id)sender { 
    self.horizontalSpaceConstraint.constant = 220; 

    [UIView animateWithDuration:0.5 animations:^{ 
     [self.imageView layoutIfNeeded]; 
    }]; 
} 

Nun ist die Ansicht sollte nur auf der rechten end.I'm bewegt werden tun, dass so in einem Animationsblock wir in der Lage sein wird, eine nette Animation von links nach rechts und umge versa.In Produktion zu sehen, die wir sollte die Werte nicht so hart codieren. Machen Sie es hier, um das Konzept zu verdeutlichen.

enter image description here

Innerhalb der Come Back Aktion, wir sind das Zurücksetzen wieder die Konstante zurück, um es ursprünglicher Wert ist, so dass Sie die orangefarbene Bild sehen können wieder auf den ursprünglichen Standort Animieren.

- (IBAction)moveBackAction:(id)sender { 
    self.horizontalSpaceConstraint.constant = 20; 

    [UIView animateWithDuration:0.5 animations:^{ 
     [self.imageView layoutIfNeeded]; 
    }]; 
} 
+0

Danke das hat mein Problem gelöst. – jdog

+0

Hey user1687717 möchte die Ansicht mit den Touch-Methoden der Ansicht animieren, ohne animierten Stil zu verwenden. –

+1

Bevor man die Konstante einer Integritätsbedingung ändert, ist es besser, '[self.imageView layoutIfNeeded]' aufzurufen. Hier hat es keinen Einfluss, aber bei realen Projekten kann es andere Animationen geben. also muss Ihr Imageview den letzten Frame vor der Animation zeigen. '(IBAction) moveBackAction: (id) sender { [self.imageView layoutIfNeeded]; self.horizontalSpaceConstraint.constant = 20; [UIView animateWithDuration: 0.5 Animationen:^{ [self.imageView layoutIfNeeded]; }]; } ' –

Verwandte Themen