0

UIView を上下に動かす簡単なアニメーションがあります。

正しく上に移動しますが、下に移動すると、下に移動しすぎます。

上と同じ距離だけ下に移動しないのはなぜですか?

- (void) animateInputViewUp: (BOOL) up
{
    const int movementDistance = 120; 
    const float movementDuration = 0.4f; 

    int movement = (up ? -movementDistance : movementDistance);

    [UIView beginAnimations: @"anim" context: nil];
    [UIView setAnimationBeginsFromCurrentState: YES];
    [UIView setAnimationDuration: movementDuration];
    self.myInputView.frame = CGRectOffset(self.myInputView.frame, 0, movement);
    [UIView commitAnimations];
}

私はそれが上に比べて2倍下に動くことを知りました - 私は理解していません.....

だから私がこれを書くとき - それは正しく動作します - 何らかの理由で...

   if (up)
        movementDistance = 120;
    else {
        movementDistance =60;
    }
4

2 に答える 2

2

ビューを -120 に移動すると、画面からはみ出してしまいます。次のように、inputView の frame.origin.y を参照する必要があります。

- (void) animateInputViewUp: (BOOL) up
{
    const int movementDistance = 120; 
    const float movementDuration = 0.4f; 

    int movement = (up ? -movementDistance : movementDistance);

    [UIView beginAnimations: @"anim" context: nil];
    [UIView setAnimationBeginsFromCurrentState: YES];
    [UIView setAnimationDuration: movementDuration];
    self.myInputView.frame = CGRectOffset(self.myInputView.frame, 0, self.myInputView.frame.origin.y + movement);
    [UIView commitAnimations];
}

それはあなたに正しい結果を与えるはずです

編集: ビューが 2 倍下に移動している理由は、たとえば、元の y 軸が 0 だとしましょう。上に移動すると、120 になります。下に戻り、-120 にまっすぐ移動します。0 (元の y 軸) を渡します。

于 2012-07-31T17:10:33.597 に答える
1

うーん、なぜそうなのかはわかりません。通常、私はビューの中心を使用してビューをアニメーション化します。フレームが切り取られたり、問題が発生したりする可能性があるように感じます。これを試して

self.myInputView.center = CGPointMake (self.myInputView.center.x,self.myInputView.center.y - movement);

ここでは推測ですが、うまくいくかどうか教えてください。

于 2012-07-31T16:53:40.997 に答える