gpt4 book ai didi

swift - 布局约束和 NSAnimationContext 的动画不正确

转载 作者:行者123 更新时间:2023-11-30 11:39:54 27 4
gpt4 key购买 nike

我想扩展 View 以响应对显示三角形的点击,但动画没有按照我想要的方式运行。

enter image description here

(抱歉,如果 gif 没有循环。该工具本应创建循环动画,但显然没有...)

当它展开时,外部 View 会立即改变大小,然后内容会向上动画回到原来的位置。当它折叠时,大小再次立即改变,然后内容在其中滚动。我想要的是尺寸变化以动画方式显示/隐藏内容,而不使它们相对于封闭 View 的左上角移动。

我的代码如下所示:

  NSAnimationContext.runAnimationGroup({
context in
context.duration = 0.25
context.allowsImplicitAnimation = true
// Order is important so we don't get conflicting constraints
if newValue {
closedConstraint.isActive = false
openConstraint.isActive = true
}
else {
openConstraint.isActive = false
closedConstraint.isActive = true
}
layoutSubtreeIfNeeded()
}, completionHandler: {
self.disclosureButton.integerValue = newValue ? 1 : 0
})

openConstraint 将封闭 View 的底部约束到最后一个字段的底部。 closeConstraint 将其限制在顶部文本标签的底部,因此只有标签可见。

那么我该如何 a) 为封闭 View 的边界设置动画并 b) 在动画过程中将内容锚定到顶部?

最佳答案

我认为您的问题来自这样一个事实:在布局约束上设置动画时,动画将仅应用于当前 View 的重新布局。

这意味着,虽然 View 的内容使用动画重新布局,但框架没有动画,因此会立即重新绘制。

要解决此问题,您可以尝试为 superview 设置动画。我不确定这在这段代码中是如何工作的,但也许尝试在动画 block 中添加 superview?.setNeedsLayout()superview?.layoutIfNeeded()

如果这不是一个完美的解决方案,我深表歉意,因为我过去遇到过类似的问题,而且也没有找到好的解决方案。

请告诉我这是否有帮助。

关于swift - 布局约束和 NSAnimationContext 的动画不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49368965/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com