为什么这个动画比它开始的位置低?

问题描述:

我有一个简单的动画,上下移动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; 
    } 

您正在将视图移至-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,因为这就是您的移动距离,然后一旦您想要它回落,它就会直接移动到-120。通过0(你原来的y轴)。

+0

谢谢 - 但这将它移动到某个我甚至不再看到它的地方 - 即使移动了视图也不见了... – user387184 2012-07-31 17:16:11

+0

检查我的编辑,我解释了为什么它移动了两倍。这是因为运动的距离逻辑。你实际上从来没有把它发回原来的y轴 – shabbirv 2012-07-31 17:25:12

+0

实际上我看到它运动 - 没有跳下去。所以它真的从120移到了-120。我如何才能将它恢复正常,或者这只是它的一贯做法,我必须将逻辑与120和60放在一起?奇怪而有趣:-) – user387184 2012-07-31 17:41:39

嗯,我不确定为什么会这样。通常我使用他们的中心为视图添加动画效果,我觉得帧可能会被剪裁等,并导致问题。试试这个

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

我只是猜测在这里,但让我知道它是否工作。

+0

结果并没有改变 - 谢谢你的提示,尽管... – user387184 2012-07-31 16:56:57