Alessandro Giovagnoli
Alessandro Giovagnoli

Reputation: 47

Button animation doesn't work properly in swift

I'm making an app in swift using Xcode and I'm having troubles with the animation of some button. Here's my situation:

enter image description here

I have three buttons in the middle of the screen where i've also added some constraints.

What i need is that when the button is clicked it reaches the top of the screen, like in this second photo with an animation:

enter image description here

I've tried this:

UIView.animateWithDuration(1, delay: 0, options: [], animations: {
        self.Button2.center.y = 18 + self.Button2.frame.height/2

        }, completion: nil)

But what happens is that the button appears from the bottom of the screen slides up to the position of the first photo. It doesn't respect the position I wrote in the animation. Is it possibile that this is due to the constraints? Because I centered it vertically and horizontally.

Can you help me to make it work?

Upvotes: 2

Views: 1749

Answers (3)

Alessandro Ornano
Alessandro Ornano

Reputation: 35402

When you work with autolayout and constraints you never make changes to the button frame in your animation, like your code: you must work always with constraints.

This is a generic example:

myButtonCenterYConstraint.constant = 200.0
myButton.layoutIfNeeded()
UIView.animateWithDuration(Double(0.5), animations: {
        myButtonCenterYConstraint.constant = 0
        myButton.layoutIfNeeded()
})

So, the first step is to declare the button constraints you will want to change as IBOutlets:

enter image description here

Upvotes: 1

Akshansh Thakur
Akshansh Thakur

Reputation: 5341

You must change the constraint first and then update the UI in animation. Something like this.

yourButton.yourOriginConstraint'sYCoordinate.constant = // Set this to what you want to change.

// yes, you should create an IBOutlet for constraint that you want to modify.

UIView.animateWithDuration(1.0, animations: {
            self.view.layoutIfNeeded()
            }, completion: nil)

Another way is to not user auto layout.

Here, is the reference

Upvotes: 0

Mradul Kumar
Mradul Kumar

Reputation: 357

First get the center y of the button then reposition the button.

float centerY = self.Button2.center.y;    

UIView.animateWithDuration(1, delay: 0, options: [], animations: {
    self.Button2.center.y = centerY + 18 + self.Button2.frame.height/2

    }, completion: nil)

Upvotes: 0

Related Questions