2017-08-03 28 views
1

我必须动画几个UIView我已经添加在UIStoryboard内的UIViewController。我已经附加了适当的约束,以便他们将始终以我正在寻找的方式可见。这可以。当应用约束时,动画视图的正确方式是什么?

我正在使用https://github.com/satoshin21/Anima库来根据我的需要为这些视图设置动画。

但问题是,他们没有按预期的方式工作,他们不是在一个方向或位置应该是动画。我相信这是因为我所应用的限制。

即使应用约束条件,实现此目的的最佳方法是什么?

设置,myView.translatesAutoresizingMaskIntoConstraints = true在控制台中出现大量警告消息。

P.S.我知道以NSLayoutConstraints的形式引用约束,但这不是我正在看的,因为上面的库仅仅提供了良好的链接函数,尽管我们可以在不引用约束的情况下执行它。

+1

你能提供一些代码,并给予更多的详细说明_not动画方向或位置应该是_? – clemens

+1

@macmoonshine,我正在为动画编写试验和错误代码。没关系。我可以重写代码,但是我看到的答案是我现在正在做的是正确与否,如果不是,那么应该怎么做才是正确的做法。我不需要代码。我需要一个想法。 *是的,我和我将永远是初学者,就好像我总是爱好者学习新事物一样。*我的名誉已经是我所知道的了。 – Hemang

回答

0

这里的问题是,NSLayoutConstraint切换的作用就像属性,它们不过是可以打开/关闭的值,而是通过玩这个切换和其他可能的值来引用。不幸的是,没有真正的方法可以解决这个问题,而且事实上,我自己已经构建了一个类似于Anima的小型库,如果您尊重NSLayoutConstraints的性质,它的工作方式会非常好。

这样做的证据是,在这个Anima库的引擎下,它只是存储在链内(在Enum值实际内部)声明的动画点,并在动画移动时应用它们。无论如何,当使用NSLayoutConstraints时,永远不应该将translatesAutoResizingMaskIntoConstraints重新设置为true。 第二个原因是约束条件是所有iOS框架操作的基础,包括.frame和动画(这就是为什么Anima从外观上看起来效果很好)。 我最近写了一篇关于这个post,但我通过引用苹果解释:

你的问题是,当translatesAutoresizingMaskIntoConstraints被称为 ,像.frame方法或.frame.size被忽略/重写 (视当你使用它们时,在 之前或之后translatesAutoresizingMaskIntoConstraints)。如Apple所述:

请注意,自动调整掩码约束条件完全指定了视图的大小和位置的 ;因此,您不能添加其他约束来修改此大小或位置而不引入冲突。如果 想要使用自动布局来动态计算视图的大小和位置 ,则必须将此属性设置为false,然后为该视图提供一个不含混淆且不冲突的约束集合。

修订 ,否则尽量不要设置translatesAutoResizingMaskIntoConstraints为true的这些观点,通过这样做,你基本上是告诉你的控制器无视你的约束,并尝试基于该.frame或.frame申请限制。尺寸或位置值设置在UIView上。因此,使您的自定义约束过时。如果通过停止这个,你仍然会遇到问题,这可能是一个约束值问题,其中我不能给你提供更多的建议,而不幸的是没有任何代码。

0

首先,如果您已经在视图上设置了合适的约束条件,则不应将translatesAutoresizingMaskIntoConstraints设置为true。将此属性设置为true将向视图添加更多约束,从而导致冲突。

与约束动画一般的代码是

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

希望这有助于。 ;)

0

我的解决方案是去除那个UIViewController的约束,并根据我的需要以编程方式设置框架。这工作正常,并且不需要使用AutoLayout来完成这种不规则的事情。

相关问题