【问题标题】:Animating negative y origin from view controller breaks constraints从视图控制器动画负 y 原点打破约束
【发布时间】:2016-02-16 09:52:31
【问题描述】:

我有 2 个视图控制器,我们将它们称为 ViewControllerAViewControllerB 在带有自动布局的情节提要中设置。我想为 2 个视图控制器之间的上/下滑动动画制作动画。

启动时ViewControllerA 在屏幕上可见。当一个动作被触发时,我希望ViewControllerB 向下滑动,所以它的view.origin.y 在动画开始时有一个负值 (-480),在动画结束时它的 view.origin.y 是 0。

然而,当做这个动画时,Xcode 唠叨Unable to simultaneously satisfy constraints.

如果想要使用向上滑动动画从 ViewControllerB 返回到 ViewControllerA 的动画,则 ViewControllerAs view.origin.y 在动画开始和结束时是正值 (480),view.origin.y 是 0而且 Xcode 不会唠叨关于约束的任何事情。

从负 y 值开始制作动画时,我需要考虑什么特别的事情吗?

【问题讨论】:

    标签: ios xcode animation autolayout nslayoutconstraint


    【解决方案1】:

    动画你的约束而不是视图的框架。在使用自动布局时更改视图的框架可能会产生意想不到的结果,您应该始终认为这是不行的。要为约束设置动画,您只需调用:

    constraint.constant += 200 // where constraint is NSLayoutConstraint
    view.setNeedsUpdateConstraints()
    UIView.animateWithDuration(0.3) { () -> Void in
        view.layoutIfNeeded()
    }
    

    【讨论】:

    • 在这种情况下,我正在为 2 个视图控制器制作动画,而不是 view 的某个子视图。我正在使用UIViewControllerAnimatedTransitioning。我认为您的建议更适用于为视图控制器的 view 设置动画子视图。
    • 我明白了,公平点。只是为了确定,您可能希望在动画之前打印出视图的约束,以确保您不会产生意外的冲突。您使用的是动画过渡委托吗?
    • 是的,我正在使用动画转换代理。就像我写的那样,动画效果很好,但当 y 原点为负时就不行了,这很奇怪。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-07-15
    • 1970-01-01
    • 2018-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多