How to pause and resume UIView Animation (without Block Animation)?

后端 未结 1 1048
轮回少年
轮回少年 2020-12-12 07:48

How do you pause and resume UIView Animations? (without block animations)

I was having the hardest time figuring this out, so here is my source below on how to do it

相关标签:
1条回答
  • 2020-12-12 07:57

    How to pause and resume UIView Animations:

    This will cover how to do the above without block animations. (People do still wish to support 3.0 and up).

    This only allows for pausing once the animation has met the set location. For how to pause an animation in the middle of an animation, i suggest using CALayers as such:

    CALayer* myLayer = [self.myUIView.layer presentationLayer];
    CGRect frameStop = myLayer.frame;
    double pausedX = frameStop.origin.x;
    double pausedY = frameStop.origin.y;
    

    Now for the actually how to:

    startAnimation = [UIButton buttonWithType:UIButtonTypeRoundedRect];
        startAnimation.titleLabel.font = [UIFont systemFontOfSize:22];
        startAnimation.titleLabel.lineBreakMode = UILineBreakModeHeadTruncation;
        [startAnimation setTitle:(@"pause") forState:UIControlStateNormal];
        [startAnimation addTarget:self action:@selector(doAnimation) forControlEvents:UIControlEventTouchUpInside];
        [self.view addSubview:startAnimation];
    
    
    
    -(void)doAnimation{
        if (bicyclePad.animationPause == false){
           [restartAnimation setTitle:(@"Resume") forState:UIControlStateNormal];
           [bicyclePad pauseAnimation];
        } else {
           [restartAnimation setTitle:(@"Pause") forState:UIControlStateNormal];
           [bicyclePad resumeAnimation];
        }
    }
    
    -(void)resumeAnimation{
        bicyclePad.animationPause = false;
        [restartAnimation setTitle:(@"Resume") forState:UIControlStateNormal];
        objectMotion = [[yourUIView alloc]initWithFrame:CGRectMake((*yourPathPoints)[0].x, (*yourPathPoints)[0].y, 8, 8)];
        [self.view addSubview:objectMotion];
        [self animateBike:nil finished:YES context:nil];
    
    
    }
    
    -(void)pauseAnimation{
       bicyclePad.animationPause = true;
    
       [restartAnimation setTitle:(@"Pause") forState:UIControlStateNormal];
       [bicyclePad doAnimation];
    }
    
    -(void)animateObject:(NSString*)animationID finished:(BOOL)finished context:(void*)context {
        [UIView beginAnimations:nil context:nil];
        [UIView setAnimationBeginsFromCurrentState:YES];
        //below suggesting your animation loops
        if (animationPause == true)
           [UIView setAnimationDidStopSelector:@selector(animateStop:finished:context:)];
        else
        [UIView setAnimationDidStopSelector:@selector(animateObject:finished:context:)];
        [UIView setAnimationDelegate:self];
        [UIView setAnimationCurve: UIViewAnimationCurveLinear];
        [UIView setAnimationDuration:yourDelay];
        [UIView commitAnimations];
        animationPause == false;
    
    }
    
    -(void)animateStop:(NSString*)animationID finished:(BOOL)finished context:(void*)context{
    }
    
    0 讨论(0)
提交回复
热议问题