Ios 应用约束时,设置视图动画的正确方法是什么?

Ios 应用约束时,设置视图动画的正确方法是什么?,ios,swift,animation,Ios,Swift,Animation,我必须制作两个UIViews的动画,我已经在UIStoryboard内部的UIViewController中添加了它们。我给它们附加了适当的约束,这样它们在我看来总是可见的。这很好 我正在使用库根据需要设置这些视图的动画 但问题是它们并没有按照预期的方式工作,它们没有按照应该的方向或位置设置动画。我相信这是因为我所施加的限制 即使应用了约束,实现这一点的最佳方法是什么 设置,myView.translatesAutoResizezingMaskintoConstraints=true会在控制台中

我必须制作两个
UIView
s的动画,我已经在UIStoryboard内部的UIViewController中添加了它们。我给它们附加了适当的约束,这样它们在我看来总是可见的。这很好

我正在使用库根据需要设置这些视图的动画

但问题是它们并没有按照预期的方式工作,它们没有按照应该的方向或位置设置动画。我相信这是因为我所施加的限制

即使应用了约束,实现这一点的最佳方法是什么

设置,
myView.translatesAutoResizezingMaskintoConstraints=true
会在控制台中显示大量警告消息


另外,我知道以
NSLayoutConstraints
的形式引用约束,但我并不这么认为,因为上面的库只是提供了良好的链接功能,尽管我们可以在不引用约束的情况下实现它。

这里的问题,NSLayoutConstraint切换的工作原理与属性类似,因为它们只不过是可以打开/关闭的值,并且可以通过使用此切换和对其他可能值的其他引用进行切换。不幸的是,据我所知,没有真正的方法来解决这个问题,事实上,我自己也建立了一个类似于Anima的小型库,如果您尊重NSLayoutConstraints的特性,它会运行得相当好

证明这一点的是,在这个Anima库的引擎盖下,它只是存储在链内部声明的动画点(实际上是在枚举值内部),并在动画移动时应用它们。无论如何,在使用NSLayoutConstraints时,决不应将
TranslatesAutoResizengMaskinToConstraints
重新设置为true。 第二个原因是,约束是所有iOS帧操作的基础,包括
.frame
和动画(这就是为什么从外观上看Anima工作得这么好)。 我最近写了一篇关于这一点的文章,但正如我引用苹果公司所解释的:

您的问题是,当translatesAutoresizingMaskIntoConstraints 调用时,将忽略/重写.frame或.frame.size等方法 (取决于使用它们的时间,在使用之前或之后) 翻译自动调整大小(从皮肤到肌肉)。如下所述:

请注意,自动调整大小遮罩约束完全指定了视图的大小 大小和位置;因此,您不能将其他约束添加到 在不引入冲突的情况下修改此大小或位置。如果你 要使用自动布局动态计算大小和位置吗 在您的视图中,必须将此属性设置为false,然后提供 视图的非模糊、非冲突约束集

已更新
否则,请尝试在这些视图中将
translatesAutoResizengMacintoConstraints
设置为true,这样做基本上是告诉控制器忽略约束,并尝试基于
UIView
上设置的.frame或.frame.size或position值应用约束。因此,使自定义约束过时。如果停止此操作,您仍然会遇到问题,这可能是一个约束值问题,不幸的是,在没有任何代码的情况下,我无法为您提供更多建议。

这里的问题是,NSLayoutConstraint切换与属性类似,因为它们只不过是可以打开/关闭的值,并交替使用此切换和其他可能值的引用。不幸的是,据我所知,没有真正的方法来解决这个问题,事实上,我自己也建立了一个类似于Anima的小型库,如果您尊重NSLayoutConstraints的特性,它会运行得相当好

证明这一点的是,在这个Anima库的引擎盖下,它只是存储在链内部声明的动画点(实际上是在枚举值内部),并在动画移动时应用它们。无论如何,在使用NSLayoutConstraints时,决不应将
TranslatesAutoResizengMaskinToConstraints
重新设置为true。 第二个原因是,约束是所有iOS帧操作的基础,包括
.frame
和动画(这就是为什么从外观上看Anima工作得这么好)。 我最近写了一篇关于这一点的文章,但正如我引用苹果公司所解释的:

您的问题是,当translatesAutoresizingMaskIntoConstraints 调用时,将忽略/重写.frame或.frame.size等方法 (取决于使用它们的时间,在使用之前或之后) 翻译自动调整大小(从皮肤到肌肉)。如下所述:

请注意,自动调整大小遮罩约束完全指定了视图的大小 大小和位置;因此,您不能将其他约束添加到 在不引入冲突的情况下修改此大小或位置。如果你 要使用自动布局动态计算大小和位置吗 在您的视图中,必须将此属性设置为false,然后提供 视图的非模糊、非冲突约束集

已更新
否则,请尝试在这些视图中将
translatesAutoResizengMacintoConstraints
设置为true,这样做基本上是告诉控制器忽略约束,并尝试基于
UIView
上设置的.frame或.frame.size或position值应用约束。因此,使自定义约束过时。如果停止此操作,您仍然会遇到问题,这可能是一个约束值问题,不幸的是,在没有任何代码的情况下,我无法为您提供更多建议。

首先,如果您已经对视图设置了适当的约束,则不应将
translatesAutoResizezingMaskintoConstraints
设置为
true
。将此属性设置为
true
将为视图添加更多约束,从而导致冲突

通则
aConstraint.constant = 1234
anotherConstraint.isActive = false
thirdConstraint.isActive = true // thirdConstraint replaces anotherConstraint
UIView.animatewithDuration: 0.25) {
    self.view.layoutIfNeeded()
}