123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657 |
- #import "RNNElementFinder.h"
-
- @implementation RNNElementFinder
-
- -(instancetype)initWithToVC:(UIViewController*)toVC andfromVC:(UIViewController*)fromVC {
- self = [super init];
- self.toVCTransitionElements = [self findRNNElementViews:toVC.view];
- self.fromVCTransitionElements = [self findRNNElementViews:fromVC.view];
- return self;
- }
-
- -(RNNElementView*)findViewToAnimate:(NSArray*)RNNTransitionElementViews withId:(NSString*)elementId{
- for (RNNElementView* view in RNNTransitionElementViews) {
- if ([view.elementId isEqualToString:elementId]){
- return view;
- }
- }
- return nil;
- }
-
- -(NSArray*)findRNNElementViews:(UIView*)view{
- NSMutableArray* elementViews = [NSMutableArray new];
- for(UIView *aView in view.subviews){
- if([aView isMemberOfClass:[RNNElementView class]]){
- [elementViews addObject:aView];
- } else{
- if ([aView subviews]) {
- [elementViews addObjectsFromArray:[self findRNNElementViews:aView]];
- }
- }
- }
- return elementViews;
- }
-
- -(void)findElementsInTransition:(RNNTransitionStateHolder*)transitionStateHolder {
- if ([self findViewToAnimate:self.toVCTransitionElements withId:transitionStateHolder.fromId]) {
- transitionStateHolder.fromElement = [self findViewToAnimate:self.toVCTransitionElements withId:transitionStateHolder.fromId];
- transitionStateHolder.isFromVC = false;
- } else if ([self findViewToAnimate:self.fromVCTransitionElements withId:transitionStateHolder.fromId]){
- transitionStateHolder.fromElement = [self findViewToAnimate:self.fromVCTransitionElements withId:transitionStateHolder.fromId];
- transitionStateHolder.isFromVC = true;
- } else {
- [[NSException exceptionWithName:NSInvalidArgumentException reason:[NSString stringWithFormat:@"elementId %@ does not exist", transitionStateHolder.fromId] userInfo:nil] raise];
- }
- if (transitionStateHolder.toId) {
- if ([self findViewToAnimate:self.toVCTransitionElements withId:transitionStateHolder.toId]) {
- transitionStateHolder.toElement = [self findViewToAnimate:self.toVCTransitionElements withId:transitionStateHolder.toId];
- } else if ([self findViewToAnimate:self.fromVCTransitionElements withId:transitionStateHolder.toId]){
- transitionStateHolder.toElement = [self findViewToAnimate:self.fromVCTransitionElements withId:transitionStateHolder.toId];
- } else {
- [[NSException exceptionWithName:NSInvalidArgumentException reason:[NSString stringWithFormat:@"elementId %@ does not exist", transitionStateHolder.toId] userInfo:nil] raise];
- }
- }
- }
-
- @end
|