Нужна помощь в увеличении параметра в 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

}
Другие вопросы по тегам