Что такое синтаксис Swift для анимации WithDuration?

Я переношу старое приложение на бета-версию Xcode 7 и получаю сообщение об ошибке в своих анимациях:

Невозможно вызвать «animateWithDuration» со списком аргументов типа «(Double, задержка: Double, параметры: nil, анимация: () -> _, завершение: nil)»

Вот код:

 UIView.animateWithDuration(0.5, delay: 0.3, options: nil, animations: {
      self.username.center.x += self.view.bounds.width
    }, completion: nil)

Это работает в Xcode 6, поэтому я предполагаю, что это обновление в Swift. Итак, мой вопрос:

Какой синтаксис Swift 3 для animateWithDuration?


person Dan Beaulieu    schedule 23.06.2015    source источник


Ответы (4)


Синтаксис Swift 3/4

Вот обновление синтаксиса Swift 3:

UIView.animate(withDuration: 0.5, delay: 0.3, options: [.repeat, .curveEaseOut, .autoreverse], animations: {
    self.username.center.x += self.view.bounds.width
}, completion: nil)

Если вам нужно добавить обработчик завершения, просто добавьте закрытие следующим образом:

UIView.animate(withDuration: 0.5, delay: 0.3, options: [.repeat, .curveEaseOut, .autoreverse], animations: {
    // animation stuff      
}, completion: { _ in
    // do stuff once animation is complete
})

Старый ответ:

Оказывается, это очень простое решение, просто измените options: nil на options: [].

Синтаксис Swift 2.2:

UIView.animateWithDuration(0.5, delay: 0.3, options: [], animations: {
      self.username.center.x += self.view.bounds.width
    }, completion: nil)

Что изменилось?

Swift 2 избавился от списка параметров C-Style, разделенных запятыми, в пользу наборов параметров (см.: OptionSetType). В моем первоначальном вопросе я передал nil для своих параметров, которые были действительны до Swift 2. С обновленным синтаксисом мы теперь видим пустой список параметров как пустой набор: [].

Вот пример animateWithDuration с некоторыми параметрами:

 UIView.animateWithDuration(0.5, delay: 0.3, options: [.Repeat, .CurveEaseOut, .Autoreverse], animations: {
      self.username.center.x += self.view.bounds.width
    }, completion: nil)
person Dan Beaulieu    schedule 23.06.2015
comment
Из-за того, что они меняют МНОГО вещей в Swift 3, на данный момент очень сложно изучить Swift. - person Chris Allinson; 25.09.2016
comment
@ChrisAllinson Я думаю, что этот набор изменений будет самым экстремальным. С этого момента изменения будут более тонкими. - person Dan Beaulieu; 25.09.2016

Свифт 3, 4, 5

UIView.animate(withDuration: 1.5, delay: 0.05 * Double(index), usingSpringWithDamping: 0.8, initialSpringVelocity: 0, options: [], animations: {
    cell.transform = CGAffineTransform(translationX: 0, y: 0)
}, completion: nil)
person emraz    schedule 28.09.2016

Синтаксис Swift 3 с блоком завершения

UIView.animate(withDuration: 3.0 , delay: 0.25, options: .curveEaseOut, animations: {

        // animation
    }, completion: { _ in

        // completion
    })
person Mr.Kushwaha    schedule 23.03.2017

Свифт 2

UIView.animateWithDuration(1.0, delay: 0.1, options: [.Repeat, .CurveEaseOut, .Autoreverse], animations: {
    // animation
}, completion: { finished in
    // completion
})

Свифт 3, 4, 5

UIView.animate(withDuration: 1.0, delay: 0.1, options: [.repeat, .curveEaseOut, .autoreverse], animations: {
    // animation
}, completion: { finished in
    // completion
})
person Karen Hovhannisyan    schedule 27.07.2019