2017-09-20 5 views
0

animation très simple:UIView Animer bloc d'achèvement appelé deux fois avec TRUE

UIView.animate(withDuration: 3, delay: 0, options: .curveLinear, animations: { 
    self.imageViewA.snp.remakeConstraints({ (make) in 
    make.bottom.equalTo(50); 
    }) 
    self.layoutIfNeeded(); 
}, completion: {(done) in 
    print(done); //called twice, both times as true 
}); 

animation a bien fonctionné. Cependant, le bloc d'achèvement est appelé deux fois. C'est bien aussi, je comprends que j'ai besoin de vérifier le booléen pour voir si c'est terminé ou non. Eh bien, non seulement le bloc d'achèvement est appelé deux fois, mais les deux temps, fait est vrai.

Comment puis-je savoir si l'animation est réellement terminée ou non?

+1

La cause la plus probable est que l'animation est déclenchée deux fois et donc terminé deux fois. Ajoutez un point d'arrêt au début de ce code et faites-le enregistrer un message puis continuez automatiquement après. – theMikeSwan

+0

@theMikeSwan je dois être fatigué. tu avais raison. Pouvez-vous poster ceci comme réponse pour que je puisse l'accepter – az2902

Répondre

0

Le bloc d'achèvement ne doit être appelé qu'une seule fois à chaque fois que l'animation est terminée. Assurez-vous que l'animation n'est pas appelée plus d'une fois.

Ajoutez un point d'arrêt au début du code que vous avez répertorié, modifiez-le pour consigner un message comme "animation starting" et définissez-le pour continuer après l'évaluation.

Si vous voyez le message plus d'une fois, vous pouvez définir le point d'arrêt à arrêter à chaque fois et regarder dans la pile d'appels pour voir d'où proviennent les appels.

Si ce n'est pas appelé deux fois, il est peut-être le temps de déposer un radar ...