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];
source share