How to animate a UIView with constraints in Swift?

naivedeveloper picture naivedeveloper · Dec 9, 2014 · Viewed 45.4k times · Source

In my contrived example, I have the following single view:

enter image description here

As you can see, it consists of a few simple constraints:

  1. Align horizontal and vertical centers,
  2. Height (set to a constant)
  3. Leading and trailing spaces (set to constant)

What I'm seeking to achieve is to have this redish/pinkish view "come in" from the top. Traditionally, in a constraint-less world, I would simply modify the frame inside of UIView.animateWithDuration, however I'm not sure how I do the similar in a constraint world.

To reiterate my question, how can I make my view start out of scene and animate the view flying in from the top?

I've considered animating the vertical centers constraint (and subsequently calling layoutIfNeeded), but it's not achieving the desired effect.

Thanks for your help.

Answer

gabbler picture gabbler · Dec 9, 2014

What you can do is to add the following code in your viewDidAppear method. You firstly make a IBOutlet property of your view's center Y constraint, and then change its constant value.

self.centerYConstraint.constant = 500.0
self.view.layoutIfNeeded()

UIView.animateWithDuration(Double(0.5), animations: {
        self.centerYConstraint.constant = 0
        self.view.layoutIfNeeded()
    })