我有一个永远的动画,但我想在某些时候停止它我尝试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];
}];
}
答案 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;
...
}