Dans ViewController.Swift, j’ai réussi à animer une boîte d’un point à un autre. Je pensais qu'il serait facile de boucler ceci pour que la boîte s'anime en un point, puis revienne à sa position d'origine, puis en boucle. J'ai réussi à déplacer l'objet à une position et de le "terminer" à nouveau, mais cela ne fait pas que je boucle. Comment cela peut il etre accompli?
Je pensais que cela pourrait fonctionner mais honnêtement, je ne sais pas:
let boxmoves = [CGRect(x: 120, y: 220, width: 100, height: 100), CGRect(x: 120, y: 120, width: 100, height: 100)]
for boxmove in boxmoves {
coloredSquare.frame = boxmove
}
Comment pourrais-je le centrer en fonction de la largeur de l'appareil (je suppose que certains calculs sont en cause?)?
Mon code:
let coloredSquare = UIView()
coloredSquare.backgroundColor = UIColor.blueColor()
coloredSquare.frame = CGRect(x: 120, y: 120, width: 100, height: 100)
self.view.addSubview(coloredSquare)
// found repeate but this will not animate as I want.
//UIView.animateWithDuration(2.0, delay: 0.2, options: UIViewAnimationOptions.Repeat, animations: {
UIView.animateWithDuration(2.0, animations: {
coloredSquare.frame = CGRect(x: 120, y: 220, width: 100, height: 100)
}, completion: { finished in
UIView.animateWithDuration(2.0, animations: {
coloredSquare.frame = CGRect(x: 120, y: 120, width: 100, height: 100)
})
})
Pas besoin de faire l'approche du bloc d'achèvement, utilisez simplement l'argument des options d'animation:
mis à jour pour Swift 3.0
UIView.animate(withDuration: 2.0, delay: 0, options: [.repeat, .autoreverse], animations: {
coloredSquare.frame = CGRect(x: 120, y: 220, width: 100, height: 100)
}, completion: nil)
Si, pour une raison quelconque, vous souhaitez arrêter l'animation ultérieurement, utilisez simplement:
coloredSquare.layer.removeAllAnimations()
UIView.animate(withDuration: 3.0,
delay: 0.0,
options: [.curveLinear, .repeat],
animations: { () -> Void in
coloredSquare.frame = CGRect(x: 120, y: 220, width: 100, height: 100)
}, completion: { (finished: Bool) -> Void in
})