我有两个UIViews
,最好显示为ASCII艺术:
|-padding-[view1]-[view2]-padding-|
我希望通过将view2
淡化(就地)并同时拉伸view1
以填充它的位置来设置|-padding-[ view1 ]-padding-|
的移除动画
view2
除此之外,view1
可以返回并且应该反转该动画......对于|-padding-[ view2 ]-padding-|
也可能发生同样的事情
{{1}}
我知道如何在没有AutoLayout的情况下执行此操作,但在涉及到这个新API时,我们似乎都是新手。使用Autolayout处理高级动画的最佳方法是什么?
答案 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,当两者都可见时,它是容器的宽度/。