How to pause and resume UIView animation (without block animation)?

How to pause and resume UIView animation? (without block animation)

I had the most difficult time to figure this out, so here is my source below on how to do this.

0
source share
1 answer

How to pause and resume UIView animation:

Here's how to do it without block animation. (People still want to support 3.0 and above).

This allows you to pause the pause only after the animation has completed the specified location. In order to pause the animation in the middle of the 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 actually, like:

 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{ } 
+2
source

Source: https://habr.com/ru/post/1315175/


All Articles