【问题标题】:Can I use auto layout in a storyboard to position my views, then disable the constraints?我可以在情节提要中使用自动布局来定位我的视图,然后禁用约束吗?
【发布时间】:2016-07-27 23:22:14
【问题描述】:

我想使用我的视图执行基于手势的交互式动画,这需要将位于屏幕中心的视图移动到屏幕的左上角。我似乎无法在两个不同 x/y 约束的位置之间进行插值(仅更改常量),因此作为替代方案,我想也许我可以在我的故事板中布置视图,然后通过直接更改框架为它们设置动画.有没有好的方法可以做到这一点,还是一个坏主意?

【问题讨论】:

    标签: swift animation autolayout storyboard


    【解决方案1】:

    您不需要删除它们!只需停用它们就足够了。

    如果您看过文档,您应该知道UIViewconstraints 属性返回它作为[NSLayoutConstraint] 具有的约束。您只需要遍历这个数组并停用所有约束!

    for constraint in someView.constraints {
        constraint.active = false
    }
    

    或者使用forEach:

    someView.constraints.forEach { $0.active = false }
    

    停用约束而不是删除它们的优点是您可以在需要时轻松地再次激活它们。

    【讨论】:

    • forEach 语句是如何工作的? $0 是什么意思?
    • @GoldenJoe 这是编写for in 循环的另一种方式。看到我在for in 循环中声明的变量constraint 了吗? forEach 闭包中的 $0 含义大致相同。如果您觉得这对您来说太实用了,请坚持使用 for in 循环。
    • @GoldenJoe 它对你有用吗?如果是,请考虑接受答案。
    • 给我一些时间。现在正在努力。
    【解决方案2】:

    如果我是你,我会选择为约束设置动画。即使由于某种原因无法更改约束常数,您仍然可以删除先前的约束并添加新的约束。 为此,您需要:

    1. 保留对要更改的约束的引用
    2. 从视图中删除它
    3. 设置新约束并将其添加到视图中
    4. 保留新约束的引用
    5. 动画:

      UIView.animateWithDuration(0.5) { self.view.layoutIfNeeded() }

    【讨论】:

    • 很遗憾,这不会产生交互式动画。
    • 为什么?你试过了吗?
    • 我不认为你理解这个问题。我正在制作一个随着用户在屏幕上上下平移而进行的动画。这不是“按下按钮观看动画”类型的动画。
    猜你喜欢
    • 2015-06-17
    • 2015-05-29
    • 1970-01-01
    • 2019-05-02
    • 1970-01-01
    • 2012-07-07
    • 1970-01-01
    • 2018-03-11
    • 2017-08-09
    相关资源
    最近更新 更多