如何取消基于UIView块的动画?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何取消基于UIView块的动画?相关的知识,希望对你有一定的参考价值。
我已经搜索了大量SO内容和Apple参考资料,但仍然无法解决我的问题。
我有:
- 连接了两个
UIImageView
和两个UIButton
的屏幕 - 2种动画:
- 在每张图像上依次放大,缩小,在
viewDidLoad
中仅放大一次)> - [当按下按钮时(一个自定义按钮隐藏在每个
UIImageView
的内部]),它会触发相应UIImageView
的动画-仅一个,而不是两个-(也按比例放大,然后按比例缩小)。 - 当我为ios4 +编写时,被告知要使用基于块的动画!
- 在每张图像上依次放大,缩小,在
我需要:
如何取消正在播放的动画?除了最后一个,我设法取消了...:/
这是我的代码段:
[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
无法正常工作,因为当按下(通过按钮)bigLetter
可以正确取消动画...
编辑:
我已经使用了此解决方案,但是按比例缩小smallLetter
UIImageView
仍然存在问题-根本没有取消...solutionEDIT2:
我已在next / prev方法的开头添加了此内容:- (void)stopAnimation:(UIImageView*)source { [UIView animateWithDuration:0.01 delay:0.0 options:(UIViewAnimationOptionBeginFromCurrentState | UIViewAnimationOptionAllowUserInteraction) animations:^ { source.transform = CGAffineTransformIdentity; } completion:NULL ]; }
问题仍然存在...:/不知道如何中断动画链中字母的最后一个动画
我已经搜索了大量SO内容和Apple的参考文献,但仍然无法解决我的问题。我所拥有的:具有2个UIImageViews和2个UIButton与其连接的屏幕2种动画:...
答案
您可以通过调用以下命令停止视图上的所有动画:
另一答案
对于iOS 10,请使用UIViewPropertyAnimator进行动画处理。它提供了启动,停止和暂停UIView动画的方法。
另一答案
我想补充一下尼克的回答,使removeAllAnimations顺利实现下一个想法非常方便。
另一答案
您可以尝试此操作(在Swift中:)>
UIView.setAnimationsEnabled(false)
UIView.setAnimationsEnabled(true)
以上是关于如何取消基于UIView块的动画?的主要内容,如果未能解决你的问题,请参考以下文章