#import "SharedElementTransitionsCreator.h" #import "RNNElementFinder.h" #import "AnimatedViewFactory.h" #import "BaseAnimator.h" #import "NSArray+utils.h" #import "SharedElementAnimator.h" @implementation SharedElementTransitionsCreator + (NSArray*)create:(NSArray*)sharedElementTransitions fromVC:(UIViewController *)fromVC toVC:(UIViewController *)toVC containerView:(UIView *)containerView { NSMutableArray* transitions = [NSMutableArray new]; for (SharedElementTransitionOptions* transitionOptions in sharedElementTransitions) { UIView *fromView = [RNNElementFinder findElementForId:transitionOptions.fromId inView:fromVC.view]; UIView *toView = [RNNElementFinder findElementForId:transitionOptions.toId inView:toVC.view]; SharedElementAnimator* sharedElementAnimator = [[SharedElementAnimator alloc] initWithTransitionOptions:transitionOptions fromView:fromView toView:toView fromVC:fromVC toVC:toVC containerView:containerView]; [transitions addObject:sharedElementAnimator]; } NSArray* sortedTransitions = [self sortByZIndex:transitions]; [self addSharedElementViews:sortedTransitions toContainerView:containerView]; return sortedTransitions; } + (void)addSharedElementViews:(NSArray *)animators toContainerView:(UIView *)containerView { for (BaseAnimator* animator in animators) { [containerView addSubview:animator.view]; } } + (NSArray*)sortByZIndex:(NSArray *)animators { return (NSArray*)[animators sortedArrayUsingComparator:^NSComparisonResult(BaseAnimator * a, BaseAnimator* b) { id first = [a.view valueForKey:@"reactZIndex"]; id second = [b.view valueForKey:@"reactZIndex"]; return [first compare:second]; }]; } @end