简体   繁体   中英

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

    }

Instead of manipulating isHidden property of the coreView use the alpha property.

Try replacing coreView.isHidden = true with coreView.alpha = 0 and in the animation block replace coreView.isHidden = false with coreView.alpha = 1

That should be it I guess. It should animate. Thanks.

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.

尝试在动画块中的coreView隐藏代码之后添加self.view.layoutIfNeeded()

Move your transition code to viewDidAppear

override func viewDidAppear(_ animated: Bool) {
//The transition occurs here
UIView.transition(with: coreView, duration: 2, options: [.curveEaseInOut, .transitionCurlDown], animations: {        
    coreView.isHidden = false
}, completion: {_ in})    
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM