如何取消UIView基于块的animation?

我search了大量的东西,并在苹果的参考,但仍然无法pipe理我的问题。

我拥有的:

  1. 2 UIImageViews与他们连接2 UIButtons屏幕
  2. 2种animation:
    2.1。 第一个是放大,然后在每个图像,一个接一个,只有一次viewDidLoad 2.2。 第二个,当按下button时(这是自定义button,隐藏在每个UIImageView的“内部”),它触发适当的UIImageViewanimation – 只有一个,而不是两个 – (也放大,然后下来)。
  3. 正如我为iOS4 +写的,我被告知使用基于块的animation!

我需要的:

如何取消正在运行的animation? 我设法取消所有,但最后一个…:/这是我的代码片段:

[UIImageView animateWithDuration:2.0 delay:0.1 options:UIViewAnimationOptionAllowUserInteraction animations:^{ isAnimating = YES; self.bigLetter.transform = CGAffineTransformScale(self.bigLetter.transform, 2.0, 2.0); } completion:^(BOOL finished){ if(! finished) return; [UIImageView animateWithDuration:2.0 delay:0.0 options:UIViewAnimationOptionAllowUserInteraction animations:^{ self.bigLetter.transform = CGAffineTransformScale(self.bigLetter.transform, 0.5, 0.5); } completion:^(BOOL finished){ if(! finished) return; [UIImageView animateWithDuration:2.0 delay:0.0 options:UIViewAnimationOptionAllowUserInteraction animations:^{ self.smallLetter.transform = CGAffineTransformScale(self.smallLetter.transform, 2.0, 2.0); } completion:^(BOOL finished){ if(! finished) return; [UIImageView animateWithDuration:2.0 delay:0.0 options:UIViewAnimationOptionAllowUserInteraction animations:^{ self.smallLetter.transform = CGAffineTransformScale(self.smallLetter.transform, 0.5, 0.5); } completion:^(BOOL finished){ if (!finished) return; //block letter buttons [self.bigLetterButton setUserInteractionEnabled:YES]; [self.smallLetterButton setUserInteractionEnabled:YES]; //NSLog(@"vieDidLoad animations finished"); }]; }]; }]; }]; 

不知何故,SmallLetter UIImageView不能正常工作,按下(通过button)beacuse bigLetter正确取消animation…在此先感谢:)

编辑:我已经使用这个解决scheme,但仍然有缩小smallLetter UIImageView的问题 – 不取消所有… 解决scheme

编辑2:我已经在下一个/ prev方法的开始添加这个:

 - (void)stopAnimation:(UIImageView*)source { [UIView animateWithDuration:0.01 delay:0.0 options:(UIViewAnimationOptionBeginFromCurrentState | UIViewAnimationOptionAllowUserInteraction) animations:^ { source.transform = CGAffineTransformIdentity; } completion:NULL ]; } 

问题仍然存在…:/不知道如何中断animation链中字母的最后一个animation

您可以通过调用以下命令停止视图上的所有animation:

 [view.layer removeAllAnimations]; 

(你需要导入QuartzCore框架来调用view.layer上的方法)。

如果你想停止一个特定的animation,而不是所有的animation,你最好的select是明确地使用CAAnimations,而不是UIViewanimation辅助方法,那么你将有更多的粒度控制,并可以明确地停止animation名称。

Apple Core Animation文档可以在这里find:

https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/CoreAnimation_guide/CreatingBasicAnimations/CreatingBasicAnimations.html

对于iOS 10,使用UIViewPropertyAnimator来animation。 它提供了启动,停止和暂停UIViewanimation的方法。

  let animator = UIViewPropertyAnimator(duration: 2.0, curve: .easeOut){    self.view.alpha = 0.0 } // Call this to start animation. animator.startAnimation() // Call this to stop animation. animator.stopAnimation(true) 

我会添加尼克的答案,使removeAllAnimations平滑下一个想法是非常方便的。

 [view.layer removeAllAnimations]; [UIView transitionWithView:self.redView duration:1.0f options:UIViewAnimationOptionTransitionCrossDissolve animations:^{ [view.layer displayIfNeeded]; } completion:nil];