UIView.animateWithDuration animation de boucle swift

In ViewController.Swift j'ai réussi à faire animer une boîte d'un point à un autre. J'ai pensé qu'il serait facile de boucler cette boucle pour que la boîte s'anime à un point et puis s'anime de nouveau à sa position d'origine et puis boucle à nouveau. J'ai réussi à déplacer l'objet à une position et "complète" le déplacer de nouveau, mais cela n'en fait pas j'en boucle. Comment cela peut-il être atteint?

j'ai pensé que ça pourrait marcher mais je ne sais pas honnêtement:

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 centrez-le en fonction de la largeur de l'appareil (je suppose qu'il y a des mathématiques impliquées?)?

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)
        })
})
24
demandé sur Cœur 2014-12-26 21:23:40

2 réponses

Pas besoin de faire de l'achèvement de l'approche modulaire, il suffit d'utiliser les options d'animation argument:

mise à 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 voulez arrêter l'animation plus tard, utilisez:

coloredSquare.layer.removeAllAnimations()
84
répondu Mazyod 2017-01-26 06:45:10
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

})
0
répondu neeraj singla 2018-09-11 11:52:15