0

我有两个UIViews,最好显示为 ASCII 艺术:

|-padding-[view1]-[view2]-padding-| 

我想view2通过淡出(原位)并同时拉伸view1来填充它的位置来动画化移除

|-padding-[    view1    ]-padding-|

除此之外,view2可以返回并应该反转该动画......并且同样可能发生view1这样的情况

|-padding-[    view2    ]-padding-|

我知道如何在没有 AutoLayout 的情况下做到这一点,但对于这个新 API,我们似乎都是菜鸟。使用 Autolayout 处理此类高级动画的最佳方法是什么?

4

1 回答 1

2

我会尝试将 view1 和 view2 放在另一个视图(下面称为容器)中。容器视图将受到如下约束:

|-padding-[container]-padding-|

然后我将 view1 和 view2 的左右边缘约束到容器视图。按钮的扩展和收缩将通过动画这些约束的常量来处理。

|-[view1]-halfContainerWidth-|
|-halfContainerWidth-[view2]-|

例如,当你想隐藏 view2 时:

[UIView animateWithDuration:0.5 animations:^{
    view2.alpha = 0.0;
    view1RightConstraint.constant = 0.0;
};

再次显示 view2:

[UIView animateWithDuration:0.5 animations:^{
    view2.alpha = 1.0;
    CGFloat containerWidth = container.frame.size.width;
    view1RightConstraint.constant = containerWidth / 2.0;
};

您可以在没有容器视图的情况下执行此操作,但我认为拥有它会使事情变得更简单。本质上,您只是管理左侧视图的右边缘约束和右侧视图的左边缘约束的常量值。当只有 1 个视图可见时,常量为 0,当两者都可见时,它是容器的宽度/2。

于 2013-09-24T22:34:36.770 回答