J'ai essayé de créer une animation qui simule un lancer de pièce de monnaie. C'est ce que j'utilise actuellement, mais il y a un léger décalage entre chaque exécution de l'animation, et je ne pense pas que UIView.transition soit la meilleure façon de le faire.Comment faire une animation en continu?
var duration: CGFloat = 0.25
var imageIndex = 1
var repeatCount = 0
@objc func handleSpin()
{
let options: UIViewAnimationOptions = .transitionFlipFromLeft
UIView.transition(with: self.coinImageView, duration: TimeInterval(duration), options: options, animations: nil) { (completed) in
if self.repeatCount == 10
{
self.duration = 0.25
self.imageIndex = 1
self.repeatCount = 0
return
//animation done
}
else
{
self.coinImageView.image = UIImage(named: self.imageNames[self.imageIndex])
self.duration += 0.075
self.repeatCount += 1
self.imageIndex = self.imageIndex == self.imageNames.count - 1 ? 0 : self.imageIndex + 1
self.handleSpin()
}
}
Cette fonction s'appelle elle-même 10 fois, augmentant légèrement la durée de l'animation à chaque fois. Mais comme je l'ai dit, le problème est qu'il y a un léger décalage entre chaque exécution que je veux réparer.
J'ai aussi essayé avec CATransition, et l'ajouter à la couche de imageView comme ceci:
func flipAnimation()
{
let animation = CATransition()
animation.type = "flip"
animation.startProgress = 0
animation.endProgress = 0.5
animation.subtype = "fromLeft"
animation.duration = 0.5
animation.repeatCount = 0
self.layer.add(animation, forKey: "animation")
}
Le problème ici est que je ne peux pas l'image de rester retournée, car elle revient à par défaut lorsque l'animation se termine, en outre, je ne sais pas comment garder une trace de quand l'animation est terminée.
Y at-il une troisième et meilleure façon de le faire?
EDIT: Je devrais mentionner que j'ai également essayé d'employer la bibliothèque de ressort, mais il a le même problème avec CATransition; quand l'animation finit l'image est revenue à son état normal et je ne trouve aucun moyen d'empêcher cela.
Ajoutez l'échantillon d'animation que vous voulez et l'animation que vous obtenez de votre code. –
Ok, je vais télécharger une courte vidéo dès que possible. – Elhoej
cochez la réponse https://stackoverflow.com/a/22549926/2963352 – vivek