搜索

首页  >  问答  >  正文

objective-c - 请教一个 iOS 动画

我想在上面的第一个方块和第二个方块之间插入一个新的方块,我希望的插入动画是新的方块从中心向两边展开(类似ppt中某个动画),同时其他几个方块的宽度能够慢慢变小,最后五个方块能够等宽,就像下面这样

但是我目前的情况是其中的文字会先瞬间移动到最终的位置(也就是说方块变小的过程中文字是不居中的),然后方块的宽度再慢慢变小,不知道为什么,我都是使用autolayout写的动画,我目前的写法是先写上新的方块的top,bottom,leading,trailing约束,然后调用layoutIfNeeded,最后是写上等宽约束,在animate block里面调用layoutIfNeeded。

天蓬老师天蓬老师2771 天前571

全部回复(1)我来回复

  • 巴扎黑

    巴扎黑2017-04-18 09:48:05

    你这个表述不太清楚。autolayout动画最重要的是把握视图的状态。一味的之调用layoutIfNeeded 只会 呈现最后一次效果。没到一个状态点都必须要保存视图状态。说简单点,也就是,动画执行完,使用layoutIfNeeded,实现效果,如果还有其他动画,就需要 使用 setNeedsLayout, 在这之后 再实现需要变动的 视图 属性;最后再次调用layoutIfNeeded;

    // 大概代码就是这样:
    // 首先确定 视图的最终位置;也可以是上一次动画结束
    [view layoutIfNeeded];
    // 然后让视图进入下一次动画准备状态
    [view setNeedsLayout];
    // *** 这里实现一些变化代码
    view.snp.top = ....
    // 最后再执行这个。如果是动画,就在 UIView animate 中执行。
    [view layoutIfNeeded];
    // 这样就 OK 了。

    回复
    0
  • 取消回复