gutenmorgenuhu
gutenmorgenuhu

Reputation: 2362

View does not animate

I have a view, which shall move up like a drawer from the bottom of the screen. But it does not do anything. It just sits there =) Can anyone please tell me, why it is doing that?

This is my code:

import UIKit

class InfoPopUpVC: UIViewController {
  var superView: UIView!
  var labelText: String!
  let textLabel =  UILabel()
  let height = CGFloat(80)


  override func viewWillAppear(animated: Bool) {
    super.viewWillAppear(animated)
    UIView.animateWithDuration(0.4, animations: { () -> Void in
      self.view.center.y = 50
    })
  }

override func viewDidLoad() {
  super.viewDidLoad()
  setupTextLabel()
  view.frame = CGRectMake(0, superView.frame.maxY-height, superView.frame.width, height)
  AnimationHelper.blurBackgroundForView(view)
  view.backgroundColor = .greenColor()
  }

func setupTextLabel(){
  textLabel.text = labelText
  textLabel.frame = CGRectMake(0, 0, view.frame.width, view.frame.height)
  textLabel.numberOfLines = 3
  textLabel.textAlignment = .Center

  textLabel.frame.inset(dx: 10, dy: 8)
  textLabel.sizeToFit()
  textLabel.font = UIFont(name: "HelveticaNeue-Light", size: 17)
  textLabel.textColor = .whiteColor()
  view.addSubview(textLabel)
  }
}

Upvotes: 1

Views: 485

Answers (2)

gutenmorgenuhu
gutenmorgenuhu

Reputation: 2362

You cannot animate a frame or similar property, if the UIViewis constrained using autolayout.

You have two options:

  1. Get rid of autolayout and animate the frames Directory
  2. Use autolayout and animate the constraints (e.g. via outlets)

See the following links for examples:

How do I animate constraint-changes

IOS: ANIMATING AUTOLAYOUT CONSTRAINTS

Upvotes: 0

kmarin
kmarin

Reputation: 342

Try to put your code as follow inside viewDidAppear or viewWillAppear and with dispatch async. Otherwise your animation might not work.

 override func viewDidAppear(animated: Bool) {
dispatch_async(dispatch_get_main_queue(), {
            UIView.animateWithDuration(0.4, animations: { () -> Void in
      self.view.center.y = 50
    })
        })
}

Upvotes: 1

Related Questions