我试图在UIView
子类中编排一些动画,这些动画需要更改视图的内在大小。
在CATransaction
完成版块中,我调用invalidateIntrinsicContentSize()
来反映尺寸的变化,并在我为约束设置动画后立即。
self.layoutIfNeeded()
UIView.animateWithDuration(2) {
NSLayoutConstraint.deactivateConstraints(oldConstraints)
NSLayoutConstraint.activateConstraints(newConstraints)
self.layoutIfNeeded()
}
但是一件奇怪的事情发生了,除了提供给deactivateConstraints
和activateConstraints
方法的约束外,我还看到视图的大小在相同的持续时间内被动画化。
以下是有关此内容的视频。
https://www.youtube.com/watch?v=OgM378Wryd0
这是问题图。
我的目的是立即更改视图的大小,而不是将其与定位约束一起设置动画。
答案 0 :(得分:1)
最终工作的一个解决方案是将初始layoutIfNeeded()
调用包装在动画块中,然后在完成时启动位置动画。
UIView.animateWithDuration(2, animations: { self.layoutIfNeeded() }) {
UIView.animateWithDuration(2) {
NSLayoutConstraint.deactivateConstraints(oldConstraints)
NSLayoutConstraint.activateConstraints(newConstraints)
self.layoutIfNeeded()
}
}
它看起来并不漂亮,因为我实际上并没有动画尺寸变化,我希望它们能够立即发生。所以我仍然在寻找一个优雅的解决方案,或者为什么不能成为一个解决方案。