iPad:用动画移动UIView,然后将其移回

时间:2010-05-24 17:56:23

标签: iphone animation uiview ipad

我在UIView子类中有以下代码,它会通过动画将其移出屏幕:

float currentX = xposition; //variables that store where the UIView is located
float currentY = yposition;

float targetX = -5.0f - self.width;
float targetY = -5.0f - self.height;

moveX = targetX - currentX; //stored as an instance variable so I can hang on to it and move it back
moveY = targetY - currentY;

[UIView beginAnimations:@"UIBase Hide" context:nil];
[UIView setAnimationDuration:duration]; 
self.transform = CGAffineTransformMakeTranslation(moveX,moveY);
[UIView commitAnimations];

效果很好。我已经将targetX / Y更改为0以查看它是否确实移动到指定点,并且确实移动到了指定点。

问题是当我尝试将视图移回原来的位置时:

moveX = -moveX;
moveY = -moveY;

[UIView beginAnimations:@"UIBase Show" context:nil];
[UIView setAnimationDuration:duration];
self.transform = CGAffineTransformMakeTranslation(moveX,moveY);
[UIView commitAnimations];

这使UIView尽可能地大约3倍。所以视图通常会被放在屏幕的右侧(取决于它的位置)。

我应该知道CGAffineTransforMakeTranslation函数吗?我阅读了文档,据我所知,它应该做我期望它做的事情。

任何人都有建议如何解决这个问题?感谢。

2 个答案:

答案 0 :(得分:2)

分配给transform会导致旧的消失。要返回原始位置,请为其指定标识转换。

self.transform = CGAffineTransformIdentity;

(或者更好的是,只需更改.frame,而不是更改.transform。)

答案 1 :(得分:2)

UIView变换不是附加的;我建议你把它移回去做:

self.transform = CGAffineTransformIdentity;

文档说(关于更新框架):

“警告:如果此属性不是标识转换,则帧属性的值未定义,因此应忽略。”