1

画像が踏まれている、つまり「押しつぶされている」ように見せようとしています。これは私がこれまでにやらなければならないコードですが、押しつぶすだけでなく、ボトムを押し上げます(スケールアニメーションであるため)。画像を縮小するのではなく、単純に短くする方法はありますか?おそらく私は2つの画像を使用する必要がありますか?:

            [UIView animateWithDuration:0.25 delay:0 options:UIViewAnimationOptionCurveEaseInOut
                             animations:^{
                                 basketView.transform = CGAffineTransformScale(CGAffineTransformIdentity, 1, 0.9);}
                             completion:^(BOOL finished){if (finished){

                [UIView animateWithDuration:0.25 delay:0 options:UIViewAnimationOptionCurveEaseInOut
                                 animations:^{
                                     basketView.transform = CGAffineTransformScale(CGAffineTransformIdentity, 1.0, 1.0);}
                                 completion:NULL];}}];
4

1 に答える 1

2

スケーリングは、デフォルトでレイヤーの中心であるビューのレイヤーを基準にして行わanchorPointれます。

したがって、オプションは次のとおりです。-アンカーポイントを変更します。-変換を3つの部分で構成します。(1)アンカーを下部に変換します。(2)スケール; (3)アンカーを元の場所に変換し直します。-変換を2つの部分で構成します。(1)スケール。(2)下部を元の場所に変換します。

アンカーポイントを変更すると、他のすべてが等しい場合に翻訳と同じ効果があります。したがって、要約バージョンでは、プロセス全体の説明に関係なく、何らかの形式で翻訳を追加します。最も簡単なのはcenter、変換を設定すると同時にレイヤーを設定することです。スケーリングと変換の両方が同時に適用される線形変換であるため、それらは正確に同期します。

たとえば、次のように変更します。

basketView.transform = CGAffineTransformScale(CGAffineTransformIdentity, 1, 0.9);

もっと似たようなものに:

CGFloat amountToScale = 0.9f;

CGAffineTransform transform =
            CGAffineTransformMakeTranslation(0.0f, 
                      (1.0f - amountToScale)*0.5f*basketView.bounds.size.height);

basketView.transform = CGAffineTransformScale(transform, 
                                    1.0f, amountToScale);

その特定のケースでは、0.9にスケーリングすると、元のサイズの合計0.1が削除されます。アンカーポイントは中央にあるので、その0.05が上から外れ、0.05が下から外れます。底から何も外れたくないので、それを打ち消すためにビューを下にシフトします。

于 2012-12-06T17:54:23.713 に答える