递归动画不能正常工作

时间:2015-08-18 15:37:52

标签: ios animation recursion

我有一个动画,一旦按下按钮就会首先调用它,一旦完成,我再次通过调用动画再次进入的方法运行动画并传递一个" TRUE"值。但是,当我停止动画并在需要时再次调用它时,即使我有相同的代码它运行得越来越快(它达到了一个点,它在不到1秒的时间内完成整个循环,它应该需要10-20秒。)任何人都可以解释我需要做什么才能让动画在我需要停止后自行重置?

此外,在我通过" FALSE"应该停止动画,我重置我正在移动的标签的框架,但是当我再次运行动画时似乎没有显示,因为有时它会在屏幕中间开始,当它应该从左边开始的屏幕。

以下是代码:

-(void)updateLabel:(BOOL)startStop
{
    CGFloat CGRectGetMinY ( CGRect rect );
    CGRect screenBound = [[UIScreen mainScreen] bounds];
    CGSize screenSize = screenBound.size;
    CGFloat screenWidth = screenSize.width;

    if(startStop)
    {  
        [UIView animateWithDuration:1.0f
        animations:^{
            progress.frame= CGRectMake(progress.frame.origin.x+20.0f, progress.frame.origin.y, progress.frame.size.width, progress.frame.size.height);
        } completion:^(BOOL finished) {                
            [self updateLabel:true];
        }];
    } else {
        [self.view.layer removeAllAnimations];
        progress.frame= CGRectMake(0.0f, progress.frame.origin.y, progress.frame.size.width, progress.frame.size.height);
    }
}

1 个答案:

答案 0 :(得分:1)

试试这个...... 而不是传递“假”'对方法进行更改,以便检查全局变量以查看它是否应该运行

//'doTask' is previously defined in your program
//set 'doTask' to false when you want the recursion to stop
//and set 'doTask' back to true before calling this again
-(void)recursiveMethod{

   if(doTask){
       //do something
       [self recursiveMethod];
   }
   else{
       //re-set anything that 
       //needs to be re-set
   }
}