六月 25, 2018

Autolayout动画

先抛开autolayout,在IOS中要想实现动画很简单,我们可以使用UIView的animation动画,或者直接CAAnimation,但是万变不离其中,无非就是一定的时间内改变View的位置、大小罢了。

这个原理应用到autolayout也一样,不同的地方就是autolayout的大小、位置是由约束来实现的,因此我们只需要根据约束算出(自动算出)动画后的位置大小即可。先看下实现代码

[containerView layoutIfNeeded];  // step1
[UIView animateWithDuration:1.0 animations:^{
  // Make all constraint changes here  //step2
  [containerView layoutIfNeeded]; // step3
}];

这里分步说明下。
1. Step1。

这段代码的意思就是说,下面我要开始动画了,在我动画之前让所有的布局都立即生效。原理参考这边文章 因为我们的约束布局或者其他的布局不会立即触发layoutsubviews方法的,只有等到下一次runlooop循环才会触发。而加了这段代码的话,如果当前有标记了重新布局,那么就会立即触发layoutsubviews

  1. Step2.
    > 这里很简单,就是设置需要动画的约束。

3.Step3.

这一步很重要,意思跟step1一样的,也就是根据step2的约束,立即计算出view的大小和位置。可以理解为立即计算出view的frame。这时候计算frame计算出来了,那么UIView的animation动画就可以根据新的frame去执行动画了。

Posted in iOS

发表评论

电子邮件地址不会被公开。 必填项已用*标注