我有两个图像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];
}
答案 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];
这可能会或可能不会解决您的取消问题,但您需要使用此动画方法。
我知道这不能解决问题。但是使用最新和不推荐的方法仍然很重要。