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];
}

我发现它向下移动的幅度是向上移动的两倍 - 我不明白......

所以当我写这个时 - 它工作正常 - 无论出于何种原因......

   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];
}

那应该给你正确的结果

编辑:您的视图向下移动两倍的原因是例如 - 假设您的原始 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 回答