我正在尝试在屏幕上显示UIView时使用动画转换。UIView显示正确,但动画出现时不会出现。

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

    }

最佳答案

这不起作用,因为在viewWillAppear方法完成之前,coreView没有正确设置,因此您不能使用转换动画(您可以设置其他属性的动画,如alpha)。
你能做的就是:

DispatchQueue.main.async {
    coreView.isHidden = false

     UIView.transition(with: coreView, duration: 2, options: [.curveEaseInOut, .transitionCurlDown], animations: {
    }, completion: {_ in})

}

这会将转换分派回主队列,并在viewWillAppear方法完成且coreView设置正确后触发。
顺便说一下,请记住每当视图控制器进入视图时都会调用viewWillAppear,因此如果它隐藏并返回,您将添加另一个coreView。

10-08 17:47