使用ECSlidingViewController时,为什么underRightViewController不能正确动画?

问题描述:

我想实现ECSlidingViewController执行缩放效果。当使用underLeftViewControlleranchorTopViewToRightAnimated时,效果是完美无瑕的。但是,在特定情况下,我需要使用underRightViewControlleranchorTopViewToLeftAnimated。但是,当我这样做时,在左侧完美工作的相同视图控制器在右侧的行为不可预测。观点基本上在正确的地方结束,但他们根本没有动画。这是我创建和设置ECSlidingViewController代码:使用ECSlidingViewController时,为什么underRightViewController不能正确动画?

if (self.slidingViewController == nil) 
    { 
     self.fieldSearchController = [[FieldSearchTableViewController alloc] initWithNibName:@"FieldSearchTableViewController" bundle:nil]; 
     self.filterVC = [[FieldSearchFilterTableViewController alloc] initWithNibName:@"FieldSearchFilterTableViewController" bundle:nil]; 
     self.slidingViewController = [[ECSlidingViewController alloc] initWithTopViewController:self.fieldSearchController]; 
     //self.slidingViewController.underLeftViewController = self.filterVC; 
     self.slidingViewController.underRightViewController = self.filterVC; 
    } 

    if (self.slidingViewController.parentViewController == nil) 
    { 
     [self addChildViewController:self.slidingViewController]; 
     CGRect frame = self.view.bounds; 
     NSInteger topSize = self.navigationController.navigationBar.frame.size.height + [UIApplication sharedApplication].statusBarFrame.size.height; 
     frame.origin.y = topSize; 
     frame.size.height -= topSize; 
     self.slidingViewController.view.frame = frame; 
     [self.view addSubview:self.slidingViewController.view]; 
    } 

而且这里是我使用的顶视图的主要代码:

//0 - Default 
    //1 - Fold 
    //2 - Zoom 
    //3 - Dynamic 
    NSDictionary *transitionData = self.transitions.all[0]; 
    id<ECSlidingViewControllerDelegate> transition = transitionData[@"transition"]; 
    if (transition == (id)[NSNull null]) { 
     super.slidingViewController.delegate = nil; 
    } else { 
     self.slidingViewController.delegate = transition; 
    } 

    NSString *transitionName = transitionData[@"name"]; 
    if ([transitionName isEqualToString:METransitionNameDynamic]) { 
     self.slidingViewController.topViewAnchoredGesture = ECSlidingViewControllerAnchoredGestureTapping | ECSlidingViewControllerAnchoredGestureCustom; 
     self.slidingViewController.customAnchoredGestures = @[self.dynamicTransitionPanGesture]; 
     [self.navigationController.view removeGestureRecognizer:self.slidingViewController.panGesture]; 
     [self.navigationController.view addGestureRecognizer:self.dynamicTransitionPanGesture]; 
    } else { 
     self.slidingViewController.topViewAnchoredGesture = ECSlidingViewControllerAnchoredGestureTapping | ECSlidingViewControllerAnchoredGesturePanning; 
     self.slidingViewController.customAnchoredGestures = @[]; 
     [self.navigationController.view removeGestureRecognizer:self.dynamicTransitionPanGesture]; 
     [self.navigationController.view addGestureRecognizer:self.slidingViewController.panGesture]; 
    } 

    [self.slidingViewController anchorTopViewToLeftAnimated:YES]; 

这还不是全部的代码,但我认为问题出现在这两个区块中的某一个区域。或者,也许,右边的动画就像我认为它不应该那样工作?我还没有看到使用这种方法的其他示例,所以我可能需要对控件IDK进行更多的自定义。

感谢您对此提供的任何帮助。

简短的回答:您需要首先重置TopViewController。

参见:ECSlidingViewController 2 sliding from right to left