JYC*_*JYC 9 cocoa-touch transition ios uicollectionview uicollectionviewlayout
我是我设置UICollectionViewController的useLayoutToLayoutNavigationTransitions,以便进行布局,布局转变为属性为'YES’ -[UINavigationController pushViewController:animated:]和popViewControllerAnimated:.另外,我已经实现了基于手势的捏合交互式过渡.
此外,我已经定义了一个UICollectionViewTransitionLayout与原始行为不同的自定义UICollectionViewTransitionLayout.我创建了一个"CustomLayoutTransition"对象的实例并从中返回-[UICollectionViewDelegate collectionView:transitionLayoutForOldLayout:newLayout:].
当我这样做时,我期待两种行为
CustomLayoutTransition用于执行自定义布局到布局的转换
1)当通过捏合手势触发交互式转换时,或者
2)当我按下/弹出一个实例时UICollectionViewController,例如通过调用[UINavigationController pushViewController:animated:]
我的期望#1似乎是正确的,但#2不是; 似乎当我以编程方式进行推送/弹出时,使用Apple提供的原始UICollectionViewTransitionLayout而不是我的自定义转换布局.
UICollectionViewTransitionLayout在这种情况下使用而不是我的自定义转换布局是否正常?
如果这是正常行为,有没有办法在以编程方式推送/弹出时使用自定义转换执行布局到布局转换UICollectionViewController?
这更像是一种解决方法,而不是正确的解决方案,但想象一下您想通过使用以下方式更改布局:
[self.collectionView setCollectionViewLayout:self.finalLayout animated:YES];
Run Code Online (Sandbox Code Playgroud)
但是您想提供自己的 UICollectionViewTransitionLayout,您可以将上面的行替换为:
[self.collectionView startInteractiveTransitionToCollectionViewLayout:self.finalLayout completion:nil];
[self.collectionView finishInteractiveTransition];
Run Code Online (Sandbox Code Playgroud)
和委托方法
- (UICollectionViewTransitionLayout*)collectionView:(UICollectionView *)collectionView transitionLayoutForOldLayout:(UICollectionViewLayout *)fromLayout newLayout:(UICollectionViewLayout *)toLayout
Run Code Online (Sandbox Code Playgroud)
按预期被调用。
同样,我希望调用委托方法而不需要以这种奇怪的方式触发转换,但事实并非如此。