停止 UIView 动画 [重复]

Posted

技术标签:

【中文标题】停止 UIView 动画 [重复]【英文标题】:Stop an UIView Animation [duplicate] 【发布时间】:2012-06-18 22:32:23 【问题描述】:

可能重复:Cancel a UIView animation?

我有以下动画,我想在按下按钮时停止它。你能告诉我我该怎么做吗?我无法弄清楚如何。谢谢。

-(void)animationLoop:(NSString *)animationID finished:(NSNumber *)finished context:(void    *)context 

[UIView beginAnimations:@"Move randomly" context:nil]; 
[UIView setAnimationDuration:1]; 
// [UIView setAnimationBeginsFromCurrentState:NO];


CGFloat x = (CGFloat) (arc4random() % (int) self.bounds.size.width); 
CGFloat y = (CGFloat) (arc4random() % (int) self.bounds.size.height); 

CGPoint squarePostion = CGPointMake(x, y); 
strechView.center = squarePostion; 

[UIView setAnimationDelegate:self]; 
[UIView setAnimationDidStopSelector:@selector(animationLoop:finished:context:)];

[UIView commitAnimations];

 

【问题讨论】:

【参考方案1】:

试试这个:

[myView.layer removeAllAnimations];

并确保同时导入 Quartz 框架:

#import <QuartzCore/QuartzCore.h>

动画是使用 QuartzCore 框架中的 CoreAnimation 应用的,甚至是 UIView 动画方法。只需定位要停止动画的视图层,然后删除其动画即可。

【讨论】:

【参考方案2】:

你可以这样做:

[self.view.layer removeAnimationForKey:@"Move randomly"];

这比调用[self.view.layer removeAllAnimations] 更有效,因为这可能会删除您想要保留的其他动画。

【讨论】:

【参考方案3】:

您可以只更改当前动画的对象/属性。它将停止动画。

【讨论】:

【参考方案4】:

我建议你使用 NSTimer。

NSTimer *myTimer = [NSTimer scheduledTimerWithTimeInterval:1.0f target:self selector:@selector(yourAnimation) userInfo:nil repeats:YES];

- (void)responseToButton:(UIButton *) _button 
    //when you want to stop the animation
    [myTimer invalidate];


- (void)yourAnimation 
      // move the view to a random point

此外,您可以将 NSTimer 设置在另一个线程上,这样即使您的 TimeInterval 值非常小,主线程也可以在您按下时响应

【讨论】:

以上是关于停止 UIView 动画 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

Swift:链式 UIView 动画永远重复? Obj-C 代码不可移植

如何使用 UIViewAnimationOptionRepeat 自动重复一组链接的 UIView 动画

链式 UIView 动画,每个动画都包含循环内的完成块 [重复]

如何使用 UIViewPropertyAnimator 创建重复动画的动画?

如果 UIView 动画在单元格上运行,则不会调用 CollectionView didSelectItemAtIndexPath

在 Swift 中重复 alpha 动画