Нужна помощь в увеличении параметра в UIView.animateWithDuration в swift
Заранее благодарю за любую помощь. У меня есть коллекция кнопок IBOutlet, которую я пытаюсь последовательно выводить на экран. Все они хорошо запускаются вне экрана, но, поскольку они анимируются, я бы хотел, чтобы каждая кнопка отображалась на экране через 0,05 секунды после предыдущей кнопки. Я не могу понять, как увеличить задержку в UIView.animateWithDuration. С помощью приведенного ниже кода все они анимируются на экране одновременно.
//outlet collection
@IBOutlet var options: [UIButton]!
let increment = 0.25
override func viewWillAppear(animated: Bool) {
super.viewWillAppear(animated)
for button in options {
button.center.y += view.bounds.height
}
override func viewDidLoad() {
super.viewDidLoad()
for button in options {
UIView.animateWithDuration(1.0, delay: increment, usingSpringWithDamping: 0.7, initialSpringVelocity: 0.0, options: nil, animations: {
button.center.y -= self.view.bounds.height
self.increment + 0.05
}, completion: nil)
}
}
Еще раз спасибо за любую помощь!
3 ответа
for button in options {
UIView.animateWithDuration(1.0, delay: increment, usingSpringWithDamping: 0.7, initialSpringVelocity: 0.0, options: nil, animations: {
button.center.y -= self.view.bounds.height
}, completion: nil)
}
increment = increment + 0.05
}
Кроме того: изменить это
let increment = 0.25
к
var increment = 0.25
Увеличить increment
внешняя анимация. Так как animateWithDuration
это асинхронный метод, он вернется первым. Итак, все ваши кнопки имеют одинаковую задержку.
@IBOutlet weak var button1: UIButton!
@IBOutlet weak var button2: UIButton!
@IBOutlet var options: [UIButton]!
let increment = 0.25
override func viewWillAppear(animated: Bool) {
super.viewWillAppear(animated)
for button in options {
button.center.y += view.bounds.height
}
}
override func viewDidAppear(animated: Bool) {
super.viewDidAppear(animated)
for button in options {
UIView.animateWithDuration(1.0, delay: increment, usingSpringWithDamping: 0.7, initialSpringVelocity: 0.0, options: nil, animations: {
button.center.y -= self.view.bounds.height
}, completion: nil)
self.increment + 0.05
}
}
Также получая ошибку "Невозможно вызвать '+=' со списком аргументов типа '(Double, FloatLiteralConvertible)'" при использовании + =, но это займет всего +
Вот способ достижения необходимой задержки между анимациями:
var i! as UInt64;
i = 0
for button in options {
// your animation with delay
UIView.animateWithDuration(1.0, delay: (i *0.05), usingSpringWithDamping: 0.7, initialSpringVelocity: 0.0, options: nil, animations: {
button.center.y -= self.view.bounds.height
}, completion: nil)
})
++i
}