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