Whats the Swift animate WithDuration syntax?
Asked Answered
C

4

37

I'm porting an older app over to Xcode 7 beta and I'm getting an error on my animations:

Cannot invoke 'animateWithDuration' with an argument list of type '(Double, delay: Double, options: nil, animations: () -> _, completion: nil)'

Here's the code:

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

This works in Xcode 6 so I'm assuming this is an update in Swift. So my question is:

What's the Swift 3 syntax for animateWithDuration?

Caz answered 23/6, 2015 at 0:8 Comment(0)
C
71

Swift 3/4 Syntax

Here's an update with the Swift 3 Syntax:

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

If you need to add a completion handler just add a closure like so:

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

Old Answer:

It turns out it's a very simple fix, just change options: nil to options: [].

Swift 2.2 Syntax:

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

What changed?

Swift 2 got rid of the C-Style comma-delimited list of options in favor of option sets (see: OptionSetType). In my original question, I passed in nil for my options, which was valid prior to Swift 2. With the updated syntax, we now see an empty option list as an empty set: [].

An example of animateWithDuration with some options would be this:

 UIView.animateWithDuration(0.5, delay: 0.3, options: [.Repeat, .CurveEaseOut, .Autoreverse], animations: {
      self.username.center.x += self.view.bounds.width
    }, completion: nil)
Caz answered 23/6, 2015 at 0:58 Comment(2)
Them changing A LOT of stuff in Swift 3 is making it really hard to learn Swift at this point in time.Glossitis
@ChrisAllinson I think this suite of changes will be the most extreme. From here on out the changes will be more subtle.Caz
C
6

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)
Closet answered 28/9, 2016 at 8:59 Comment(0)
P
4

Swift 3 Syntax with completion block

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

        // animation
    }, completion: { _ in

        // completion
    })
Pengelly answered 23/3, 2017 at 7:53 Comment(0)
H
0

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
})
Hurwitz answered 27/7, 2019 at 7:34 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.