Анимация анимации UIView.animateWithDuration
Я абсолютно не знаком с Xcode и пытаюсь изучить Swift.
В ViewController.Swift мне удалось сделать окно анимацией из одной точки в другую. Я думал, что было бы легко зациклировать это, чтобы ящик мог оживить одну точку, а затем вернуться в исходное положение, а затем снова зациклиться. Мне удалось переместить объект в позицию и "полностью" переместить его обратно, но это не делает цикл i. Как это можно достичь?
Я подумал, может быть, это может сработать, но я честно не знаю:
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
}
Как я мог бы центрировать его на основе ширины устройства (я предполагаю, что есть какая-то математика?)?
Любые хорошие сайты для новичков на Xcode, чтобы рекомендовать?
С уважением
Johan
Мой код:
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)
})
})
Ответы
Ответ 1
Не нужно делать подход блока завершения, просто используйте аргумент параметров анимации:
обновлен для 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()