首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >包含布局约束和NSAnimationContext的动画不正确

包含布局约束和NSAnimationContext的动画不正确
EN

Stack Overflow用户
提问于 2018-03-20 01:27:47
回答 1查看 154关注 0票数 0

我想要展开一个视图,以响应一个显示三角形的点击,但是动画并没有按照我想要的方式运行。

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

当它展开时,外部视图立即改变大小,然后内容向上动画回到适当的位置。当它折叠时,大小再次立即改变,然后内容在其中滚动。我想要的是动画大小的改变,显示/隐藏内容,而不是相对于封闭视图的左上角移动。

我的代码如下所示:

代码语言:javascript
复制
  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将封闭视图的底部限制为最后一个字段的底部。closedConstraint将其限制在顶部的文本标签的底部,因此只有标签可见。

那么我如何a)动画封闭视图的边界,以及b)在动画过程中将内容锚定在顶部?

EN

回答 1

Stack Overflow用户

发布于 2018-03-20 03:40:04

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

这意味着,当视图的content使用动画进行重新布局时,frame没有动画,因此会立即重新绘制。

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

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

如果有帮助,请告诉我。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49368965

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档