最佳NSLayoutConstraint动画删除/添加并排项目

时间:2013-09-24 22:08:49

标签: ios animation uiview nsautolayout

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

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

我希望通过将view2淡化(就地)并同时拉伸view1以填充它的位置来设置|-padding-[ view1 ]-padding-| 的移除动画

view2

除此之外,view1可以返回并且应该反转该动画......对于|-padding-[ view2 ]-padding-| 也可能发生同样的事情

{{1}}

我知道如何在没有AutoLayout的情况下执行此操作,但在涉及到这个新API时,我们似乎都是新手。使用Autolayout处理高级动画的最佳方法是什么?

1 个答案:

答案 0 :(得分: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,当两者都可见时,它是容器的宽度/。