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 …)
- ios缓慢/不工作的CSS3转换
- ios ipad:在横向模式下将TabBar旋转到左侧,并进行变换和约束更新
- iOS – 这个UIPageViewController由UISegmentedControl控制,或者这是什么?
- 转换不工作在IOS
- iOS:有关GLKMatrix4MakeLookAt结果内相机信息的问题
- 如何使用转换来旋转UIView
- 如何使用UICollectionViewTransitionLayout插入自定义的UICollectionViewLayoutAttributes属性
- “魔术移动”效果自定义转换
- 转换行为使用transitionFromView和transitionWithView