title: UIView.animateWithDuration Not Animating Swift (again)
body: <p>Note: I’ve already checked the following stack overflow issues:</p>
  
  <p><a href="https://stackoverflow.com/questions/27907570">27907570</a>, <a href="https://stackoverflow.com/questions/32229252">32229252</a>, <a href="https://stackoverflow.com/questions/26118141">26118141</a>, <a href="https://stackoverflow.com/questions/31604300">31604300</a></p>
  
  <p>All I am trying to do is fade animate in a view (by alpha) when called by an IBAction attached to a button. Then reverse when a button on the view is hit.</p>
  
  <p>My wrinkle may be that I'm using a secondary view that is on the ViewDock in the storyboard View. The view is added to the subview at the time of viewDidLoad where the frame/bounds are set to the same as the superview (for a full layover)</p>
  
  <p>The reason this is done as an overlay view since it is a tutorial indicator.</p>
  
  <p>The result (like many others who've listed this problem) is that the view (and contained controls) simply appears instantly and disappears as instantly. No fade.</p>
  
  <p>I have tried animationWithDuration with delay, with and without completion, with transition, and even started with the old UIView.beginAnimations.</p>
  
  <p>Nothing is working. Suggestions warmly welcomed.</p>
  
  <p>The code is about as straight forward as I can make it:<br />
  <strong>Edit:</strong> Expanded the code to everything relevant<br />
  <strong>Edit2:</strong> TL;DR Everything works with the exception of UIViewAnimateWithDuration which seems to ignore the block and duration and just run the code inline as an immediate UI change. <em>Solving this gets the bounty</em></p>
  
  <pre><code>@IBOutlet var infoDetailView: UIView! // Connected to the view in the SceneDock
  
  override func viewDidLoad() {
      super.viewDidLoad()
  
      // Cut other vDL code that isn't relevant
  
      setupInfoView()
  }
  
  func setupInfoView() {
      infoDetailView.alpha = 0.0
      view.addSubview(infoDetailView)
      updateInfoViewRect(infoDetailView.superview!.bounds.size)
  }
  
  func updateInfoViewRect(size:CGSize) {
      let viewRect = CGRect(origin: CGPointZero, size: size)
  
      infoDetailView.frame = viewRect
      infoDetailView.bounds = viewRect
  
      infoDetailView.layoutIfNeeded()
      infoDetailView.setNeedsDisplay()
  }
  
  override func viewWillTransitionToSize(size: CGSize, withTransitionCoordinator coordinator: UIViewControllerTransitionCoordinator) {
      super.viewWillTransitionToSize(size, withTransitionCoordinator: coordinator)
      updateInfoViewRect(size)
  }
  
  func hideInfoView() {
      AFLog.enter(thisClass)
      UIView.animateWithDuration(
          2.0,
          animations:
          {
              self.infoDetailView.alpha = 0.0
          },
          completion:
          { (finished) in
              return true
          }
      )
      AFLog.exit(thisClass)
  }
  
  func showInfoView() {
      AFLog.enter(thisClass)
      UIView.animateWithDuration(
          2.0,
          animations:
          {
              self.infoDetailView.alpha = 0.75
          },
          completion:
          { (finished) in
              return true
          }
      )
      AFLog.exit(thisClass)
  }
  
  // MARK: - IBActions
  
  @IBAction func openInfoView(sender: UIButton) {
      showInfoView()
  }
  
  @IBAction func closeInfoView(sender: UIButton) {
      hideInfoView()
  }
  </code></pre>
  
  <p>Please note, I started with the following:</p>
  
  <pre><code>func showInfoView() {
      UIView.animateWithDuration(2.0, animations: { () -&gt; Void in
          self.infoDetailView.alpha = 0.75
      })
  }
  
  func hideInfoView() {
      UIView.animateWithDuration(2.0, animations: { () -&gt; Void in
          self.infoDetailView.alpha = 0.00
      })
  }
  </code></pre>