我正在尝试使用自动布局约束与UIStackViews一起制作动画。有一种动画我很喜欢。
我有一个嵌套在UIView(橙色)中的UIImageView(绿色),然后由UIStackView处理。当仅保留那些元素可见时,视图应缩小。我正在尝试更改以下约束:
通常宽度和高度为64,前/后/上/下约束为10,我正在使用以下方法将它们分别更改为46和7:
<label id="label" value="${name}" />
此函数由另一个函数调用:
private func setImageShrunk() {
imageWidth.constant = 46
imageHeight.constant = 46
imageTopMargin.constant = 7
imageBottomMargin.constant = 7
imageRightMargin.constant = 7
imageLeftMargin.constant = 7
}
缩小图像而不显示动画会突然返回预期结果。但是,尝试制作动画,我得到以下结果:
我希望视图朝左上角缩小,而不是从中心缩小。它不应该“先移动,后扩展”。有谁知道如何在iOS 11中使用AutoLayout实现此目的?
答案 0 :(得分:1)
所以我想出了一个小项目来重新创建错误的过程。
在第二个项目中,设置是相同的,但是动画按预期运行。经过一番思考,我意识到在这个新项目中,我从UIViewController
包含 UIStackView
的动画中调用了动画。
在最初的问题中,我忽略了提及我是从扩展了UIStackView
的类中调用动画的,因此视图本身也要动画。尽管View从外部引用了约束,但它不知道其环境和嵌入View。这就是为什么它会跳跃然后缩放的原因。
我通过将要完成的动画转移到包含UIViewController
的{{1}}来解决了这个问题。
答案 1 :(得分:0)
如果您设置width和height,则不需要左右限制,例如将高度从64更改为46时,底部距离应为28(10 + 18),并且将其设置为7,那么就会有冲突,对于权利也是如此,因此要么删除它们,要么降低其优先级
顺便说一句,只有在橙色视图对宽度和高度有其他限制的情况下,所有这一切才有效
答案 2 :(得分:0)
您是否设置了UIView的锚点?现在它在中心点而不是左上角收缩。另外,您应该创建一个自定义动画,定义这两个动画并将它们链接在一起。您可以在网上找到很多解决方案,但这是一个示例。它是用于精灵工具包,但想法是相同的。
Query<A> query = await Query<A>(context)
..join(set: (a) => a.ab);
实际上,分组使神奇。
这是Apple文档中针对核心动画的解决方案。
#if os(iOS)
let transform:SKAction = SKAction.move(to: CGPoint(x: -40, y: -45), duration: 0.3)
let rotateAction:SKAction = SKAction.rotate(toAngle: degree(-20), duration: 0.3)
#else
let transform:SKAction = SKAction.move(to: CGPoint(x: -40, y: 60), duration: 0.3)
let rotateAction:SKAction = SKAction.rotate(toAngle: degree(-20), duration: 0.3)
#endif
let endAction:SKAction = SKAction.perform(#selector(GameScene.animateToTableEnded), onTarget: self)
let combineAction:SKAction = SKAction.sequence([SKAction.group([transform, rotateAction]), endAction])