我正在尝试使用自动布局约束与 UIStackViews 一起实现动画。我遇到了一种动画。
我有一个 UIImageView(绿色)嵌套在 UIView(橙色)中,后者又由 UIStackView 处理。当只有那些元素可见时, View 应该缩小。我正在尝试更改以下约束:
通常宽度和高度为 64,前导/尾随/顶部/底部约束为 10,我使用以下方法将它们分别更改为 46 和 7:
private func setImageShrunk() {
imageWidth.constant = 46
imageHeight.constant = 46
imageTopMargin.constant = 7
imageBottomMargin.constant = 7
imageRightMargin.constant = 7
imageLeftMargin.constant = 7
}
这个函数被另一个函数调用:
func shrinkImage(animated: Bool) {
if(animated) {
UIView.animate(withDuration: 1) {
self.setImageShrunk()
self.layoutIfNeeded()
}
} else {
setImageShrunk()
}
}
在没有动画的情况下缩小图像会返回预期的结果,当然是突然的。但是,尝试为其设置动画时,我得到以下结果:
我希望 View 向左上角收缩,而不是从中心收缩。它不应该“先移动,后扩展”。有谁知道如何在 iOS 11 中使用 AutoLayout 来实现这一点?
最佳答案
所以我弄清楚了试图制作一个小项目来重现错误时发生了什么。
在第二个项目中,设置相同,但动画效果如我所料。经过一番思考后,我意识到在这个新项目中,我从 UIViewController
containing UIStackView
调用了动画。
在最初的问题中,我没有提到我是从扩展 UIStackView
的类中调用动画的,所以 View 本身就是动画的。即使它从外部引用了约束,View 也不知道它的环境和嵌入的 View。这就是它跳跃然后缩放的原因。
我通过将要完成的动画传输到包含 UIStackView
的 UIViewController
来解决这个问题。
关于ios - AutoLayout 约束动画从错误的点缩放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51969176/