#import @implementation TGPhotoEditorAnimation + (POPSpringAnimation *)prepareTransitionAnimationForPropertyNamed:(NSString *)propertyName { POPSpringAnimation *animation = [POPSpringAnimation animationWithPropertyNamed:propertyName]; animation.springBounciness = 1; animation.springSpeed = 12; return animation; } + (void)performBlock:(void (^)(bool))block whenCompletedAllAnimations:(NSArray *)animations { if (block == nil) return; NSMutableSet *animationsSet = [NSMutableSet setWithArray:animations]; __block bool allFinished = true; void (^onAnimationCompletion)(POPAnimation *, BOOL) = ^(POPAnimation *animation, BOOL finished) { if (!finished) allFinished = false; [animationsSet removeObject:animation]; if (animationsSet.count == 0 && block != nil) block(allFinished); }; for (POPAnimation *animation in animations) animation.completionBlock = onAnimationCompletion; } @end