Depuis la mise à niveau de mon projet vers Swift 3, les animations de contrainte de retrait automatique ne fonctionnent pas. pour être plus précis, ils s'adaptent à la nouvelle position plutôt que d'animer.
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
// ....
})
Je sais qu'ils ont ajouté la classe UIViewPropertyAnimator
mais je ne l'ai pas encore essayée.
J'ai eu ce problème aussi avec la dernière mise à jour de Swift 3.
Pour être exact, chaque fois que vous souhaitez animer la vue, vous appelez réellement layoutIfNeeded sur la vue d'ensemble de cette vue.
Essayez ceci à la place:
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
// ....
})
Il semble que par le passé, ils ont été indulgents pour pouvoir relayer simplement la vue que vous souhaitez animer. Mais c’est dans la documentation que vous devriez vraiment appeler layoutIfNeeded dans l’aperçu.
Mise à niveau vers Swift 3.0
Voir l'animation de droite à gauche comme l'animation Push par défaut d'Apple
//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)
Définissez d'abord la nouvelle valeur pour votre contrainte, puis appelez animate.
self.YOUR_CONSTRAINT.constant = NEW_VALUE
UIView.animate(withDuration: 1.0) {
self.view.layoutIfNeeded()
}
Swift 3.1, Xcode 8.3.2
Ce code fonctionne bien pour moi. Toute modification de votre vue s'animera au ralenti.
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 de droite à gauche pour la recherche
// initialement défini x = Your_View_Width
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)