我必须为UIStoryboard中的UIViewController中添加的几个UIView
设置动画。我已经附加了适当的约束,以便它们始终以我正在寻找的方式可见。这很好。
我正在使用https://github.com/satoshin21/Anima库来根据我的需要设置这些视图的动画。
但问题是他们没有像预期的那样工作,他们没有在应有的方向或位置上制作动画。我相信这是因为我已经应用了限制。
即使应用了约束,实现这一目标的最佳方法是什么?
设置,myView.translatesAutoresizingMaskIntoConstraints = true
在控制台中会出现大量警告消息。
P.S。我知道以NSLayoutConstraints
的形式引用约束,但这不是我所看到的,因为上面的库只提供了良好的链接函数,尽管我们可以在不引用约束的情况下完成它。
答案 0 :(得分:0)
这里的问题是,NSLayoutConstraint切换就像属性一样工作,因为它们只是可以打开/关闭的值,并且通过玩这种切换和其他可能的值的其他可能值来交替。不幸的是,没有真正解决这个问题的方法,事实上我自己已经构建了一个类似于Anima的小型库,如果你尊重NSLayoutConstraints的性质,它的效果相当好。
证明这一点是在这个Anima库的引擎下,它只是存储在链内声明的动画点(事实上在Enum值内),并在动画移动时应用它们。无论如何,在使用NSLayoutConstraints时,不应该将translatesAutoResizingMaskIntoConstraints
重新设置为true。
第二个原因是约束是所有iOS帧操作的基础,包括.frame
和动画(这就是为什么Anima从它的外观上工作得很好)。
我最近写了post,但正如我通过引用Apple解释的那样:
你的问题是,当translatesAutoresizingMaskIntoConstraints是 调用,.frame或.frame.size等方法被忽略/覆盖 (取决于您何时或之后使用它们 translatesAutoresizingMaskIntoConstraints)。如Apple所述:
请注意,自动调整遮罩约束会完全指定视图 大小和位置;因此,您无法添加其他约束 修改此大小或位置而不引入冲突。如果你 想要使用自动布局来动态计算大小和位置 在您的视图中,您必须将此属性设置为false,然后提供一个 视图的非模糊,非冲突的约束集。
<强>已更新强>
否则,尽量不要使用这些视图将translatesAutoResizingMaskIntoConstraints
设置为true,这样做基本上可以告诉控制器忽略您的约束,并尝试根据.frame或.frame.size或位置值设置应用约束在UIView
上。因此,使您的自定义约束过时。如果通过停止此操作,您仍然会遇到问题,这可能是一个约束值问题,我不能在没有任何代码的情况下为您提供更多建议。
答案 1 :(得分:0)
首先,如果您已经在视图上设置了合适的约束,则不应将translatesAutoresizingMaskIntoConstraints
设置为true
。将此属性设置为true
将为视图添加更多约束,从而导致冲突。
带约束的动画的一般代码是
aConstraint.constant = 1234
anotherConstraint.isActive = false
thirdConstraint.isActive = true // thirdConstraint replaces anotherConstraint
UIView.animatewithDuration: 0.25) {
self.view.layoutIfNeeded()
}
希望这会有所帮助。 ;)
答案 2 :(得分:0)
我的解决方案是删除UIViewController
的约束,并根据我的需要以编程方式设置框架。这很好用,不需要使用AutoLayout
来完成这个不完整的事情。