UICollectionView finishInteractiveTransition没有animation完成

我正在实现一个自定义的交互式集合视图布局转换,并且想要对它进行configuration,以便在调用finishInteractiveTransition使用一个转换布局transitionProgress为1.0, startInteractiveTransitionToCollectionViewLayout:completion:的完成块立即被触发。

我需要这种行为,因为我希望能够在完成后立即开始另一个转换。 有了这个完成块没有立即发射,我最终nested push animation can result in corrupted navigation bar日志中的nested push animation can result in corrupted navigation bar ,因为转换上下文还没有completeTransition:它的completeTransition:方法。

事实上,即使没有animation要求,也只有0.05秒的小延迟。 是否有可能强制UICollectionView不animation这个完成?


一些代码…

我有一个转换控制器,处理导航转换的animation和交互式转换。 该控制器的相关部分如下:

 - (void)startInteractiveTransition:(id<UIViewControllerContextTransitioning>)transitionContext { self.context = transitionContext; UIView *inView = [self.context containerView]; UICollectionViewController *fromCVC = (UICollectionViewController *)[self.context viewControllerForKey:UITransitionContextFromViewControllerKey]; UICollectionViewController *toCVC = (UICollectionViewController *)[self.context viewControllerForKey:UITransitionContextToViewControllerKey]; self.transitionLayout = (MyTransitionLayout *)[fromCVC.collectionView startInteractiveTransitionToCollectionViewLayout:toCVC.collectionViewLayout completion:^(BOOL completed, BOOL finish) { [self.context completeTransition:completed]; [inView addSubview:toCVC.view]; }]; } - (void)updateInteractiveTransition:(CGFloat)progress { if (!self.context) return; self.percentComplete = progress; if (self.percentComplete != self.transitionLayout.transitionProgress) { self.transitionLayout.transitionProgress = self.percentComplete; [self.transitionLayout invalidateLayout]; [self.context updateInteractiveTransition:self.percentComplete]; } } - (void)finishInteractiveTransition { if (!self.context) return; UICollectionViewController *fromCVC = (UICollectionViewController *)[self.context viewControllerForKey:UITransitionContextFromViewControllerKey]; [fromCVC.collectionView finishInteractiveTransition]; [self.context finishInteractiveTransition]; } - (void)cancelInteractiveTransition { if (!self.context) return; UICollectionViewController *fromCVC = (UICollectionViewController *)[self.context viewControllerForKey:UITransitionContextFromViewControllerKey]; [fromCVC.collectionView cancelInteractiveTransition]; [self.context cancelInteractiveTransition]; } 

我已经validation了在调用finishInteractiveTransition ,转换布局的transitionProgress正好是1.0。 根据UIViewControllerTransitioning.h头文件, completionSpeed默认为1.0,导致完成持续时间(1 - percentComplete)*duration ,所以持续时间应该是0,但它不是…它至less需要几个运行在完成块被调用之前循环。

是否有可能做我想做的,或者我将不得不实现我自己的版本startInteractiveTransitionToCollectionViewLayout:completion: ? (不是世界末日,但是我宁愿尽可能地坚持标准的API …)