如何在触摸时删除uiview动画块

时间:2013-10-31 08:37:21

标签: ios objective-c uiviewanimation

我从viewDidLoad调用函数[self moveFishLeft]并且对象正确动画,但是当我尝试在touchesBeganWithEvent上删除动画时,动画仍然存在。那么如何在屏幕触摸上删除所有左右功能动画。

- (void)moveFishLeft {

    [UIView animateWithDuration:6.0f   
                          delay:0.0f   
                        options:UIViewAnimationOptionAllowUserInteraction | UIViewAnimationOptionAllowAnimatedContent  
                     animations:^{  
                         [optionView1 setFrame:CGRectMake(0, 480, 130, 110)];  
                         [optionView2 setFrame:CGRectMake(0, 600, 130, 110)];   
                         [optionView3 setFrame:CGRectMake(130, 530, 130, 110)];  
                         [optionView4 setFrame:CGRectMake(130, 670, 130, 110)];  
                         [optionView5 setFrame:CGRectMake(130, 780, 130, 110)];  
                         [optionView6 setFrame:CGRectMake(0, 720, 130, 110)];
                                    }
                     completion:^(BOOL finished) {

                         [optionView1.layer removeAllAnimations];
                         [optionView2.layer removeAllAnimations];
                         [optionView3.layer removeAllAnimations];
                         [optionView4.layer removeAllAnimations];
                         [optionView5.layer removeAllAnimations];
                         [optionView6.layer removeAllAnimations];

                         [optionImage1 setImage:[UIImage imageNamed:@"fish1_right"]];
                         [optionImage2 setImage:[UIImage imageNamed:@"fish1_right"]];
                         [optionImage3 setImage:[UIImage imageNamed:@"fish1_right"]];
                         [optionImage4 setImage:[UIImage imageNamed:@"fish1_right"]];
                         [optionImage5 setImage:[UIImage imageNamed:@"fish1_right"]];
                         [optionImage6 setImage:[UIImage imageNamed:@"fish1_right"]];

                         [self moveFishRight];
                     }];
}


- (void)moveFishRight {

    [UIView animateWithDuration:6.0f      
                          delay:0.0f        
                        options:UIViewAnimationOptionAllowUserInteraction | UIViewAnimationOptionAllowAnimatedContent       
                     animations:^{     
                         [optionView1 setFrame:CGRectMake(530, 480, 130, 110)];     
                         [optionView2 setFrame:CGRectMake(530, 600, 130, 110)];      
                         [optionView3 setFrame:CGRectMake(638, 530, 130, 110)];      
                         [optionView4 setFrame:CGRectMake(638, 670, 130, 110)];      
                         [optionView5 setFrame:CGRectMake(638, 780, 130, 110)];        
                         [optionView6 setFrame:CGRectMake(530, 720, 130, 110)];      
                     }
                     completion:^(BOOL finished) {

                         [optionView1.layer removeAllAnimations];
                         [optionView2.layer removeAllAnimations];
                         [optionView3.layer removeAllAnimations];
                         [optionView4.layer removeAllAnimations];
                         [optionView5.layer removeAllAnimations];
                         [optionView6.layer removeAllAnimations];

                         [optionImage1 setImage:[UIImage imageNamed:@"fish1"]];
                         [optionImage2 setImage:[UIImage imageNamed:@"fish1"]];
                         [optionImage3 setImage:[UIImage imageNamed:@"fish1"]];
                         [optionImage4 setImage:[UIImage imageNamed:@"fish1"]];
                         [optionImage5 setImage:[UIImage imageNamed:@"fish1"]];
                         [optionImage6 setImage:[UIImage imageNamed:@"fish1"]];

                         [self moveFishLeft];
                     }];
}

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{

    [optionView1.layer removeAllAnimations];
    [optionView2.layer removeAllAnimations];
    [optionView3.layer removeAllAnimations];
    [optionView4.layer removeAllAnimations];
    [optionView5.layer removeAllAnimations];
    [optionView6.layer removeAllAnimations];
}

2 个答案:

答案 0 :(得分:0)

请参考以下代码: - [self.view.layer removeAllAnimations];使用它可能有用。

答案 1 :(得分:0)

您忘记在CATransaction中包装所有“removeAllAnimations”:

(需要QuartzCore导入)

[CATransaction begin];
[optionView1.layer removeAllAnimations];
[optionView2.layer removeAllAnimations];
[optionView3.layer removeAllAnimations];
[optionView4.layer removeAllAnimations];
[optionView5.layer removeAllAnimations];
[optionView6.layer removeAllAnimations];
[CATransaction commit];