2017-07-18 2 views
1

J'ai actuellement une couleur d'arrière-plan statique:Animer les couleurs de fond dans Swift 3

self.backgroundColor = UIColor(red: 0.0, green: 0.0, blue: 1.0, alpha: 1.0) 

Comment puis-je code pour créer une série de couleurs animées sur un certain nombre de secondes (par exemple 5 secondes par couleur) et puis revenir au début de la boucle de couleur?

J'ai essayé ce qui suit ...

self.backgroundColor = UIColor(red: 1.0, green: 0.0, blue: 0.0, alpha: 1.0) 
UIView.animate(withDuration: 5.0, animations: {() -> Void in 
    self.backgroundColor = UIColor(red: 0.0, green: 1.0, blue: 0.0, alpha: 1.0); 
    self.backgroundColor = UIColor(red: 0.0, green: 0.0, blue: 1.0, alpha: 1.0) 
}) 

... mais cela reste juste sur la dernière couleur bleue.

Répondre

2

Vous devez faire une animation imbriquée

self.backgroundColor = UIColor(red: 1.0, green: 0.0, blue: 0.0, alpha: 1.0) 
    UIView.animate(withDuration: 5.0, animations: {() -> Void in 
     self.backgroundColor = UIColor(red: 0.0, green: 1.0, blue: 0.0, alpha: 1.0); 
    }, 
    completion: { finished in 
     UIView.animate(withDuration: 5.0, animations: {() -> Void in 
      self.backgroundColor = UIColor(red: 0.0, green: 0.0, blue: 1.0, alpha: 1.0) 
     }, completion: { finished in 
      //other color do the same 
     }) 

    }) 
+2

Exactement. CoreAnimation interpole les propriétés animables entre leurs valeurs actuelles et les dernières qui sont déterminées après l'exécution du bloc d'animation. Notez également que si l'argument de bloc 'finished' n'est pas utilisé, vous pourriez être mieux avec' completion: {_ in ...} '. – J2b

+0

Le code dans l'animation imbriquée ci-dessus va directement à la dernière couleur (bleu) et reste là sans l'animation entre les couleurs précédentes. – Bootfit

0

vous pouvez essayer ceci:

let maxNumberOfRepeats = 10 
    var currentNumberOfRepeats = 0 
    Timer.scheduledTimer(withTimeInterval: 5, repeats: true) { timer in 
     currentNumberOfRepeats = currentNumberOfRepeats + 1 
     if currentNumberOfRepeats == maxNumberOfRepeats { 
      timer.invalidate() 
      UIView.animate(withDuration: 1, animations: { 
       self.backgroundColor = UIColor(red: 0.0, green: 1.0, blue: 0.0, alpha: 1.0) //return to first color 
      }) 
     } else { 
      UIView.animate(withDuration: 1, animations: { 
       self.backgroundColor = UIColor(red: 0.0, green: 0.0, blue: 0.0, alpha: 1.0) //or any other random color 
      }) 
     } 
    }