Autolayout 动画

override func didMoveToSuperview() {
        let view = UIView()
        view.backgroundColor = UIColor.whiteColor()
        /// 这里是初始位置
        view.addTo(self).snp_makeConstraints { (make) in
            make.width.height.equalTo(100)
            make.center.equalTo(self)
        }
        /// 这里是动画移动位置
        view.snp_updateConstraints { (make) in
            make.centerY.equalTo(self).offset(100)
        }
        
        UIView.animateWithDuration(1, delay: 1, usingSpringWithDamping: 1, initialSpringVelocity: 0.8, options: [], animations: {
        /// 开始执行动画
            view.layoutIfNeeded()
            }, completion: nil)
        
    }

如上代码;
我需要实现,以makeConstraints为初始位置,使用动画效果移动到updateConstraints执行之后的位置;但是目前的结果是,代码执行后,动画执行效果是直接从view创建过渡到up之后最终的位置。
请问如何解决?刚做autolayout动画,不熟悉

阅读 3.1k
2 个回答

初始的布局操作之后进行 layoutIfNeeded(),
然后再setNeedLayout()告诉它后面的内容是你需要更新的,这样就有动画效果了。

这个问题是由于最初的约束还没有生效就进行了修改,解决方案是在snp_makeConstraints后面先调用一次view.layoutIfNeeded()使这些约束生效,然后再进行Update约束和动画

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进