ios removeAllAnimations不起作用

时间:2014-01-18 10:09:46

标签: ios animation

我有一个永远的动画,但我想在某些时候停止它我尝试removeAllAnimations但它没有用。 这是我的代码。

[self.backgroundImageView.layer removeAllAnimations];

-(void)animateToLeft{
    if(isInCenter){
        [UIView animateWithDuration:10.0f animations:^{
            backgroundImageView.frame = CGRectMake(kLeftX, 0, kBackgroundWidth, kBackgroundHeight);
        }completion:^(BOOL finished) {
            [self animateToRight];
        }];
         isInCenter = NO;
    }
    else{
        [UIView animateWithDuration:20.0f animations:^{
            backgroundImageView.frame = CGRectMake(kLeftX, 0, kBackgroundWidth, kBackgroundHeight);
        }completion:^(BOOL finished) {
            [self animateToRight];
        }];
    }

}

-(void)animateToRight{
    [UIView animateWithDuration:20.0f animations:^{
        backgroundImageView.frame = CGRectMake(kRightX, 0, kBackgroundWidth, kBackgroundHeight);
    }completion:^(BOOL finished) {
        [self animateToLeft];
    }];
}

2 个答案:

答案 0 :(得分:1)

  

这在您的情况下无效。

因为[self.backgroundImageView.layer removeAllAnimations];这将删除已由[self.backgroundImageView.layer addAnimation:/*CABasicAnimation should added here*/];

添加的所有图层动画

您可以通过在完成时设置布尔变量来停止此循环,然后使用布尔变量进行检查。

答案 1 :(得分:1)

使用布尔值,如果已设置,请不要执行下一个动画 - 也取消待处理的动画..

e.g。

@interface MyClass () {
     BOOL cancelAll;
}

@implementation MyClass

-(void)cancelAnimation {
     self.imageView.layer removeAllAnimations]; //!
     cancelAll = YES;
}

-(void)animateToLeft{
        if(cancelAll)
            return;
        ...
}

-(void)animateToRight{
        if(cancelAll)
            return;
        ...
}