ios - AutoLayout 约束动画从错误的点缩放
问题描述
我正在尝试使用自动布局约束来实现动画,并与 UIStackViews 一起使用。我遇到了一个动画。
我有一个嵌套在 UIView(橙色)中的 UIImageView(绿色),它又由 UIStackView 处理。当只有这些元素可见时,视图应该缩小。我正在尝试更改以下约束:
通常宽度和高度为 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()
}
}
在没有动画的情况下缩小图像会返回预期的结果,当然是突然的。但是,尝试对其进行动画处理,我得到以下结果:
我希望视图向左上角缩小,而不是从中心缩小。它不应该“先移动,后扩展”。有谁知道如何在 iOS 11 中使用 AutoLayout 来实现这一点?
解决方案
所以我弄清楚了尝试制作一个小项目来重新创建错误时发生了什么。
在第二个项目中,设置相同,但动画效果与我预期的一样。经过一番思考,我意识到在这个新项目中,我从UIViewController
包含UIStackView
.
在最初的问题中,我没有提到我是从一个扩展类调用动画UIStackView
,所以 View 本身是动画的。即使它从外部引用了约束,视图也不知道它的环境和嵌入视图。这就是为什么它只是跳跃然后缩放。
我通过将要完成的动画转移到UIViewController
包含UIStackView
.
推荐阅读
- java - 为什么键绑定不能与 CardLayout 一起使用?
- junit - UIAutomator - editText 中的 setText 不起作用
- sql-server - 子查询适用于这种情况吗?
- java - 如何读取 .jar 中的文件,该文件是 .war 文件的依赖项
- python - 在数据框中查找上下第二个最接近的数字
- python - 无法在 Windows 上安装 zbar
- sql-server - 如何将 SQL 还原的输出拆分为电子邮件格式
- excel - 从单元格 <> A1 开始的数字序列
- hazelcast-jet - hazelcast 喷射流是否将数据与聚合一起存储在节点中
- .net-core - .NET Core 的预览版未显示在 Visual Studio 2017 15.9 中