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;
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.
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];
}];
}
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
Es ist schwieriger auf dem ersten, aber ich beginne es tatsächlich besser zu mögen.Sie können viel mehr damit tun –
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