UIView Animation Sync

Hi in response to touch events, my application is viewing the animation. If the user works very fast and makes one more touch, even when the current animation is happening, everything becomes ruined.

Is there a standard way to deal with this infrastructure problem? Or am I doing the animation wrong?

He is currently checking the flag (animationInProgress) to handle this, but I wanted to know why we should resort to this?

Here is the code:

- (void)animationDidStop:(NSString *)animationID finished:(NSNumber *)finished context:(void *)context { NSMutableArray *c = (NSMutableArray*)context; UINavigationController *nc = [c objectAtIndex:0]; [nc.view removeFromSuperview]; animationInProgress = NO; } - (void)transitionViews:(BOOL)topToBottom { if (animationInProgress) { return; } animationInProgress = YES; NSMutableArray *context = [[NSMutableArray alloc] init]; [UIView beginAnimations:@"myanim" context:context]; [UIView setAnimationDuration:0.7f]; [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut]; [UIView setAnimationDelegate:self]; [UIView setAnimationDidStopSelector:@selector(animationDidStop:finished:context:)]; UIViewController *from; UIViewController *to; if (navController3.view.superview == nil ) { from = navController2; to = navController3; } else { from = navController3; to = navController2; } int height; if (topToBottom) { height = -1 * from.view.bounds.size.height; } else { height = from.view.bounds.size.height; } CGAffineTransform transform = from.view.transform; [UIView setAnimationsEnabled:NO]; to.view.bounds = from.view.layer.bounds; to.view.transform = CGAffineTransformTranslate(transform, 0, height); [window addSubview:to.view]; [UIView setAnimationsEnabled:YES]; from.view.transform = CGAffineTransformTranslate(from.view.transform, 0, -1 * height); to.view.transform = transform; [context addObject:from]; [UIView commitAnimations]; return; } 
+7
source share
1 answer

The default behavior for wireframes, as you have noticed, means that any event can happen at the same time if you want to.

Using the flag, as you do, is perfectly reasonable if your goal is to block a specific animation if it is already running.

If you want to conceptually go up one level and stop any touch events from entering the application at all during the animation, you can use:

 [[UIApplication sharedApplication] beginIgnoringInteractionEvents]; 

paired with:

 [[UIApplication sharedApplication] endIgnoringInteractionEvents]; 
+10
source

All Articles