UIView过渡动画未执行

时间:2017-06-06 19:23:25

标签: ios swift uiviewanimation uiviewanimationtransition

我试图在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})

    }

4 个答案:

答案 0 :(得分:1)

而不是操纵coreView的 isHidden 属性,而是使用 alpha 属性。

尝试将 coreView.isHidden = true 替换为 coreView.alpha = 0 ,并在动画块中将 coreView.isHidden = false 替换为< strong> coreView.alpha = 1

我猜应该是这样。它应该动画。感谢。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

这不起作用,因为在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。

答案 3 :(得分:0)

将转换代码移至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})    
}