Подтвердить что ты не робот

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

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

Невозможно вызвать 'animateWithDuration' с помощью списка аргументов типа '(Double, delay: Double, options: nil, animations:() → _, завершение: ноль) '

Здесь код:

 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 для анимацииWithDuration?

4b9b3361

Ответ 1

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)

Ответ 2

Swift 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)

Ответ 3

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

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

        // animation
    }, completion: { _ in

        // completion
    })

Ответ 4

Swift 2

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

Swift 3, 4, 5

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