0

UIViewsASCII アートとして最もよく示されている 2 つがあります。

|-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 に答える