it-swarm.com.ru

UIView.animateWithDuration Swift цикл анимации

В ViewController.Swift мне удалось оживить окно из одной точки в другую. Я подумал, что это будет легко зациклить, чтобы окно анимировалось в одну точку, затем возвращалось в исходное положение, а затем снова зацикливалось. Мне удалось переместить объект в положение и «завершить» переместить его снова, но это не делает цикл. Как этого достичь?

Я думал, что это может сработать, но я, честно говоря, не знаю:

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
}

Как я могу отцентрировать его в зависимости от ширины устройства (я полагаю, в этом есть какая-то математика?)?

Мой код:

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)
        })
})
26
Johan Ndiyo Linnarsson

Нет необходимости использовать блок завершения, просто используйте аргумент параметров анимации:

обновлено для 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)

Если по какой-либо причине вы хотите остановить анимацию позже, просто используйте:

coloredSquare.layer.removeAllAnimations()
97
Mazyod
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

})
1
neeraj singla