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动画,不熟悉
初始的布局操作之后进行 layoutIfNeeded(),
然后再setNeedLayout()告诉它后面的内容是你需要更新的,这样就有动画效果了。
这个问题是由于最初的约束还没有生效就进行了修改,解决方案是在snp_makeConstraints后面先调用一次view.layoutIfNeeded()使这些约束生效,然后再进行Update约束和动画