iosswiftuiviewanimationuiviewanimationtransition

UIView transition animation not executing


I'm trying to use an animation transition for when a UIView appears on screen. The UIView appears correctly but the animation doesn't occur when it appears.

  override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)

    let coreView = UIView(frame: CGRect(x: 10, y: 10, width: 100, height: 100))
    coreView.backgroundColor = UIColor.cyan
    coreView.layer.borderColor = UIColor.darkGray.cgColor
    coreView.layer.borderWidth = 8
    coreView.layer.cornerRadius = 15
    coreView.isHidden = true
    self.view.addSubview(coreView)

    //The transition occurs here
    UIView.transition(with: coreView, duration: 2, options: [.curveEaseInOut, .transitionCurlDown], animations: {

      coreView.isHidden = false
    }, completion: {_ in})

    }

Solution

  • This isn't working because coreView is not properly setup until after the viewWillAppear method completes so you can't use the transition animation (you can animate other properties like the alpha).

    What you can do is this:

    DispatchQueue.main.async {
        coreView.isHidden = false
    
         UIView.transition(with: coreView, duration: 2, options: [.curveEaseInOut, .transitionCurlDown], animations: {
        }, completion: {_ in})
    
    }
    

    This dispatches the transition back onto the main queue and it fires after the viewWillAppear method have completed and the coreView is properly setup.

    By the way remember that viewWillAppear is called whenever the view controller is comes into view so if it hides and returns you will add another coreView.