为什么这个动画比它开始的位置低?
问题描述:
我有一个简单的动画,上下移动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轴)。
答
嗯,我不确定为什么会这样。通常我使用他们的中心为视图添加动画效果,我觉得帧可能会被剪裁等,并导致问题。试试这个
self.myInputView.center = CGPointMake (self.myInputView.center.x,self.myInputView.center.y - movement);
我只是猜测在这里,但让我知道它是否工作。
+0
结果并没有改变 - 谢谢你的提示,尽管... – user387184 2012-07-31 16:56:57
谢谢 - 但这将它移动到某个我甚至不再看到它的地方 - 即使移动了视图也不见了... – user387184 2012-07-31 17:16:11
检查我的编辑,我解释了为什么它移动了两倍。这是因为运动的距离逻辑。你实际上从来没有把它发回原来的y轴 – shabbirv 2012-07-31 17:25:12
实际上我看到它运动 - 没有跳下去。所以它真的从120移到了-120。我如何才能将它恢复正常,或者这只是它的一贯做法,我必须将逻辑与120和60放在一起?奇怪而有趣:-) – user387184 2012-07-31 17:41:39