2012-09-15 50 views
9

我有一个UIView动画,我需要取消在我的iOS应用程序。我试过这个:取消UIView动画 - self.view.layer removeAllAnimations不起作用

[self.view.layer removeAllAnimations]; 

但它没有奏效。动画继续。这里是我的动画代码:

[UIView animateWithDuration:1.4 delay:0 options:UIViewAnimationOptionCurveEaseOut animations:^{ 
recognizer.view.transform = CGAffineTransformTranslate(recognizer.view.transform, translation.x, translation.y); 
} completion:^(BOOL finished) { 

      NSLog(@"completed animation, now do whatever"); 
     }]; 

没有任何人有任何想法,为什么它不工作?

+2

您添加的动画识别器视图,因此你将不得不从同一观点的图层删除。因此,您可能需要[recognition.view.layer removeAllAnimations]而不是[self.view.layer removeAllAnimations]。 – Till

+1

嗨。谢谢 - 现在发生了一些事情,但是这引起了另一个问题。它将动画结束并立即停止在那里。我希望它停止在当前位置 - 当我想停止动画时它的位置 - 不会跳到最后。这可以这样做吗? –

+2

查看'recognizer.view.layer.presentationLayer'。它将具有中间变换,只需将其设置为当前图层:'Recognizer.view.layer.transform = recognitionizer.view.layer.presentationLayer.transform;'...可能需要更多工作。 – Mazyod

回答

10

您正在将该动画添加到识别器视图,因此您必须将其从同一视图的图层中移除。

所以不是

[self.view.layer removeAllAnimations]; 

可能要

[recognizer.view.layer removeAllAnimations]; 

并随时变换的当前状态,获取从表现层的那一个。表示层是实际反映动画期间更改的表示层。

recognizer.view.layer.transform = recognizer.view.layer.presentationLayer.transform; 
+1

感谢您的第一次2.与最后一节保持状态的问题。得到这个错误:“在'id'类型的对象上找不到'属性'转换'” –

3

好的 - 只是想通了。将图像视图顶部的手势识别器生成的组件动画更改为图像视图本身。现在,在代码停止动画之前,我有:

truckView.frame = [[trackView.layer presentationLayer] frame]; 
[truckView.layer removeAllAnimations]; 

所以这就是实现它的方法。感谢您的使我这个答案的帮助下,

山姆

+0

我使用这个,但开始思考,因为它在删除所有动画之前获取框架,动画实际上继续一点点,被设置已过时 – MobileMon