首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么这个动画比它开始的地方低呢?

为什么这个动画比它开始的地方低呢?
EN

Stack Overflow用户
提问于 2012-07-31 16:42:19
回答 2查看 49关注 0票数 0

我有一个简单的动画,可以上下移动一个UIView。

当它正确地向上移动时,当它向下移动时,它移动得太远了。

为什么不和向上移动相同的距离呢?

代码语言:javascript
复制
- (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];
}

我发现它的下移是向上的两倍-我不明白……

所以当我写这篇文章的时候--它是正确的--不管出于什么原因.

代码语言:javascript
复制
   if (up)
        movementDistance = 120;
    else {
        movementDistance =60;
    }
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-07-31 17:10:33

您正在将视图移动到-120,这将离开屏幕。您需要引用inputView的frame.origin.y .initi.y如下:

代码语言:javascript
复制
- (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,因为这就是你的movementDistance,那么一旦你想让它下降,它就直接移动到-120。它通过0(你原来的y轴)。

票数 2
EN

Stack Overflow用户

发布于 2012-07-31 16:53:40

嗯,我不知道为什么会这样。通常,我使用它们的中心动画视图,我觉得框架可以被剪裁等等并引起问题。尝尝这个

代码语言:javascript
复制
self.myInputView.center = CGPointMake (self.myInputView.center.x,self.myInputView.center.y - movement);

我只是在猜,但如果成功的话,请告诉我。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11745016

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档