从视图控制器动画负 y 原点打破约束
Posted
技术标签:
【中文标题】从视图控制器动画负 y 原点打破约束【英文标题】:Animating negative y origin from view controller breaks constraints 【发布时间】:2016-02-16 09:52:31 【问题描述】:我有 2 个视图控制器,我们将它们称为 ViewControllerA
和 ViewControllerB
在带有自动布局的情节提要中设置。我想为 2 个视图控制器之间的上/下滑动动画制作动画。
启动时ViewControllerA
在屏幕上可见。当一个动作被触发时,我希望ViewControllerB
向下滑动,所以它的view.origin.y
在动画开始时有一个负值 (-480),在动画结束时它的 view.origin.y
是 0。
然而,当做这个动画时,Xcode 唠叨Unable to simultaneously satisfy constraints.
如果想要使用向上滑动动画从 ViewControllerB
返回到 ViewControllerA
的动画,则 ViewControllerA
s view.origin.y
在动画开始和结束时是正值 (480),view.origin.y
是 0而且 Xcode 不会唠叨关于约束的任何事情。
从负 y 值开始制作动画时,我需要考虑什么特别的事情吗?
【问题讨论】:
【参考方案1】:动画你的约束而不是视图的框架。在使用自动布局时更改视图的框架可能会产生意想不到的结果,您应该始终认为这是不行的。要为约束设置动画,您只需调用:
constraint.constant += 200 // where constraint is NSLayoutConstraint
view.setNeedsUpdateConstraints()
UIView.animateWithDuration(0.3) () -> Void in
view.layoutIfNeeded()
【讨论】:
在这种情况下,我正在为 2 个视图控制器制作动画,而不是view
的某个子视图。我正在使用UIViewControllerAnimatedTransitioning
。我认为您的建议更适用于为视图控制器的 view
设置动画子视图。
我明白了,公平点。只是为了确定,您可能希望在动画之前打印出视图的约束,以确保您不会产生意外的冲突。您使用的是动画过渡委托吗?
是的,我正在使用动画转换代理。就像我写的那样,动画效果很好,但当 y 原点为负时就不行了,这很奇怪。以上是关于从视图控制器动画负 y 原点打破约束的主要内容,如果未能解决你的问题,请参考以下文章