web-dev-qa-db-fra.com

Quelle est la syntaxe Swift animer WithDuration?

Je porte une ancienne application sur Xcode 7 beta et je reçois une erreur sur mes animations:

Impossible d'appeler 'animateWithDuration' avec une liste d'arguments de type '(Double, délai: Double, options: nil, animations: () -> _, complétion: nil)'

Voici le code:

 UIView.animateWithDuration(0.5, delay: 0.3, options: nil, animations: {
      self.username.center.x += self.view.bounds.width
    }, completion: nil)

Cela fonctionne dans Xcode 6, donc je suppose que c'est une mise à jour dans Swift. Ma question est donc:

Quelle est la syntaxe Swift 3 pour animateWithDuration?

31
Dan Beaulieu

Syntaxe Swift 3/4

Voici une mise à jour avec la syntaxe Swift 3:

UIView.animate(withDuration: 0.5, delay: 0.3, options: [.repeat, .curveEaseOut, .autoreverse], animations: {
    self.username.center.x += self.view.bounds.width
}, completion: nil)

Si vous devez ajouter un gestionnaire d'achèvement, ajoutez simplement une fermeture comme ceci:

UIView.animate(withDuration: 0.5, delay: 0.3, options: [.repeat, .curveEaseOut, .autoreverse], animations: {
    // animation stuff      
}, completion: { _ in
    // do stuff once animation is complete
})

Ancienne réponse:

Il s'avère que c'est une solution très simple, changez simplement options: nil à options: [].

Syntaxe Swift 2.2:

UIView.animateWithDuration(0.5, delay: 0.3, options: [], animations: {
      self.username.center.x += self.view.bounds.width
    }, completion: nil)

Qu'est ce qui a changé?

Swift 2 s'est débarrassé de la liste d'options délimitées par des virgules de style C en faveur des jeux d'options (voir: OptionSetType ). Dans ma question d'origine, j'ai passé nil pour mes options, qui était valide avant Swift 2. Avec la syntaxe mise à jour, nous voyons maintenant une liste d'options vide comme vide ensemble: [].

Un exemple d'animationWithDuration avec quelques options serait ceci:

 UIView.animateWithDuration(0.5, delay: 0.3, options: [.Repeat, .CurveEaseOut, .Autoreverse], animations: {
      self.username.center.x += self.view.bounds.width
    }, completion: nil)
65
Dan Beaulieu

Swift 3, 4, 5

UIView.animate(withDuration: 1.5, delay: 0.05 * Double(index), usingSpringWithDamping: 0.8, initialSpringVelocity: 0, options: [], animations: {
    cell.transform = CGAffineTransform(translationX: 0, y: 0)
}, completion: nil)
4
emraz

Syntaxe Swift 3 avec bloc d'achèvement

UIView.animate(withDuration: 3.0 , delay: 0.25, options: .curveEaseOut, animations: {

        // animation
    }, completion: { _ in

        // completion
    })
3
Mr.Kushwaha

Swift 2

UIView.animateWithDuration(1.0, delay: 0.1, options: [.Repeat, .CurveEaseOut, .Autoreverse], animations: {
    // animation
}, completion: { finished in
    // completion
})

Swift 3, 4, 5

UIView.animate(withDuration: 1.0, delay: 0.1, options: [.repeat, .curveEaseOut, .autoreverse], animations: {
    // animation
}, completion: { finished in
    // completion
})
0
Karen Hovhannisyan