Seit der Aktualisierung meines Projekts auf Swift 3 funktionieren meine Animationsbeschränkungen für das automatische Layout nicht. Um genauer zu sein, fangen sie an der neuen Position, anstatt zu animieren.
UIView.animate(withDuration: 0.1,
delay: 0.1,
options: UIViewAnimationOptions.curveEaseIn,
animations: { () -> Void in
constraint.constant = ButtonAnimationValues.YPosition.DefaultOut()
self.layoutIfNeeded()
}, completion: { (finished) -> Void in
// ....
})
Ich weiß, dass sie die UIViewPropertyAnimator
-Klasse hinzugefügt haben, aber ich muss es noch probieren.
Dieses Problem hatte ich auch mit dem neuesten Update von Swift 3.
Um genau zu sein, wann immer Sie die Ansicht animieren möchten, rufen Sie eigentlich layoutIfNeeded in der Übersicht dieser Ansicht auf.
Versuchen Sie es stattdessen:
UIView.animate(withDuration: 0.1,
delay: 0.1,
options: UIViewAnimationOptions.curveEaseIn,
animations: { () -> Void in
constraint.constant = ButtonAnimationValues.YPosition.DefaultOut()
self.superview?.layoutIfNeeded()
}, completion: { (finished) -> Void in
// ....
})
Es scheint, als hätten sie in der Vergangenheit Nachsicht gehabt, die Ansicht, die Sie animieren möchten, einfach weiterzuleiten. Aber es ist in der Dokumentation, dass Sie wirklich LayoutIfNeeded im Überblick aufrufen sollten.
Upgrade auf Swift 3.0
Animation von rechts nach links anzeigen, wie bei der Apple-Standard-Push-Animation
//intially set x = SCREEN_WIDTH
view.frame = CGRect(x: ScreenSize.SCREEN_WIDTH, y: ScreenSize.SCREEN_HEIGHT - heightTabBar , width: ScreenSize.SCREEN_WIDTH, height: heightTabBar)
UIView.animate(withDuration: 0.50, delay: 0.0, usingSpringWithDamping: 1.0, initialSpringVelocity: 0, options: [], animations: {
//Set x position what ever you want
view.frame = CGRect(x: 0, y: ScreenSize.SCREEN_HEIGHT - heightTabBar , width: ScreenSize.SCREEN_WIDTH, height: heightTabBar)
}, completion: nil)
Legen Sie zunächst den neuen Wert für Ihre Einschränkung fest und rufen Sie dann animieren auf.
self.YOUR_CONSTRAINT.constant = NEW_VALUE
UIView.animate(withDuration: 1.0) {
self.view.layoutIfNeeded()
}
Swift 3.1, Xcode 8.3.2
Dieser Code funktioniert gut für mich. Alle Änderungen in Ihrer Ansicht werden in Zeitlupe animiert.
UIView.animate(withDuration: 3.0, animations: { // 3.0 are the seconds
// Write your code here for e.g. Increasing any Subviews height.
self.view.layoutIfNeeded()
})
Swift 4, Xcode 10
Animation von rechts nach links für die Suche
// Anfangs x = Ihre_Ansicht_Breite gesetzt
viewOfSearch.frame = CGRect(x: viewOfSearch.frame.size.width, y: 0 , width: viewOfSearch.frame.size.width, height: 50)
UIView.animate(withDuration: 0.50, delay: 0.0, usingSpringWithDamping: 1.0, initialSpringVelocity: 0, options: [], animations: {
//Set x position what ever you want
self.viewOfSearch.frame = CGRect(x: 0, y: 0 , width: self.viewOfSearch.frame.size.width, height: 50)
}, completion: nil)
func setView(view: UIView) {
UIView.transition(with: view, duration: 1.0, options: .transitionFlipFromTop, animations: {
})
}