web-dev-qa-db-fra.com

Animation de Swift 3 UIView

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.

16
Alex Brown

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.

25
Enoch Ng

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)
8
Saumil Shah

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()
}
5
abdullahselek

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()

})
2
Prashant Gaikwad

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)
1
Md Shamshad Akhtar