iOS UIView动画取消不起作用

时间:2014-02-10 11:40:38

标签: ios iphone objective-c ios7 uiviewanimation

我有两个图像mosha1& mosha2。我通过UIView动画将它们从某个位置移动到另一个点(206,89)。现在我希望如果用户在移动时触摸任何图像,那么该图像的移动将在那里停止。所以我设置了停止动画运动的代码:

[mosha1.layer removeAllAnimations];

此方法调用会停止图像的移动,但是然后它会显示在点(206,89)中。但它应该出现在用户触摸的确切位置。怎么解决这个?

UIView动画方法:

-(void)moshaMoveUp: (UIImageView *)mosha {

[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:3.0];
[UIView setAnimationDelay:0];
[UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
[UIView setAnimationDelegate:self];
mosha.center = CGPointMake(206, 89);
[UIView commitAnimations];

}

3 个答案:

答案 0 :(得分:5)

原因在于动画如何与不同的图层一起使用。在您开始动画的那一刻,您的对象在逻辑上立即就在目的地。但是,有一个表示层显示对象向目的地移动。 因此,如果要停止对象,则需要从UIView的表示层获取其当前位置,将其分配给视图的位置,然后删除动画,并且您的对象应该在正确的位置。 / p>

答案 1 :(得分:2)

停止动画后,frame将成为最终目的地。如果要将其停在原位,则必须获取视图的图层presentationLayer(包含对象的当前状态,而不是最终状态),并使用它来调整frame的查看问题:

CALayer *layer = self.animatedView.layer.presentationLayer;
[self.animatedView.layer removeAllAnimations];
self.animatedView.frame = layer.frame;

答案 2 :(得分:0)

请改用它。你在做什么已经很老了,不再支持了。

[UIView animateWithDuration:3.0
                      delay:0.0
                    options:UIViewAnimationOptionsCurveEaseInOut
                 animations:^() {
                             mosha.center = CGPointMake(206, 89);
                            }
                 completion:nil];

这可能会或可能不会解决您的取消问题,但您需要使用此动画方法。

我知道这不能解决问题。但是使用最新和不推荐的方法仍然很重要。