3

可能重复:
取消 UIView 动画?

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

-(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];

} 
4

4 回答 4

6

尝试这个:

[myView.layer removeAllAnimations];

并且一定要导入 Quartz 框架:

#import <QuartzCore/QuartzCore.h>

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

于 2012-06-18T23:57:38.597 回答
3

你可以这样做:

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

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

于 2012-06-19T00:18:46.197 回答
0

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

于 2012-06-18T22:53:44.390 回答
0

我建议你使用 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 值非常小,主线程也可以在您按下时响应

于 2012-06-19T04:09:58.677 回答