How to move a UIView programmatically in Swift

When using constraints, you never want to set a view's frame directly. Instead, reconfigure the constraints and let the auto layout engine set your view's frame for you. Create an IBOutlet in your view controller to store a reference to your "Center Y Alignment constraint". Make sure you connect it in your storyboard or xib.

@IBOutlet var yConstraint: NSLayoutConstraint

Then you can set the constraint's constant property to offset it from the Y position (positive number will move it down, negative moves it up).

yConstraint.constant = 200

This would move your view 200 points down.


Swift 4

UIView.animateKeyframes(withDuration: 0.25, delay: 0.0, options: UIViewKeyframeAnimationOptions(rawValue: 7), animations: {
       self.infoTextLabelView.frame.origin.y+=200

},completion: nil)

See my answer to this other question about a good way to programmatically move views using auto layout: https://stackoverflow.com/a/30687856/3149796

Also, depending on the effect you're going for and other requirements of your UI, you might also achieve this with transforms without disturbing your auto layout.

// Create a new transform
self.infoTextLabelView.transform = CGAffineTransformMakeTranslation( 0.0, 200.0 )

// Or modify existing transform
self.infoTextLabelView.transform = CGAffineTransformTranslate( self.infoTextLabelView.transform, 0.0, 200.0  )

Swift 5

Use CGAffineTransform

@IBOutlet weak var mainCurtain: UIView!

func moveUp() {
    UIView.animate(withDuration: 0.5, delay: 0.0, options:[], animations: {
        self.mainCurtain.transform = CGAffineTransform(translationX: 0, y: 0)
    }, completion: nil)
}


func moveDown() {
    UIView.animate(withDuration: 0.5, delay: 0.0, options:[], animations: {
        let screenSize = UIScreen.main.bounds.size
        self.mainCurtain.transform = CGAffineTransform(translationX: 0, y: screenSize.height * 0.5)
    }, completion: nil)
}

Tags:

Move

Uiview

Swift