9

我将我UICollectionViewController的 'useLayoutToLayoutNavigationTransitions属性设置为 'YES' 以便为-[UINavigationController pushViewController:animated:]和执行布局到布局转换popViewControllerAnimated:。此外,我还实现了基于捏合手势的交互式过渡。

此外,我还定义了一个UICollectionViewTransitionLayout行为不同于UICollectionViewTransitionLayout. 我创建了我的“CustomLayoutTransition”对象的一个​​实例并从-[UICollectionViewDelegate collectionView:transitionLayoutForOldLayout:newLayout:].

当我这样做时,我期待两种行为

CustomLayoutTransition用于执行自定义布局到布局转换
1) 当交互转换由捏合手势触发时,或
2) 当我推送/弹出 的实例时UICollectionViewController,例如,通过调用[UINavigationController pushViewController:animated:]

我的期望 #1 似乎是正确的,但 #2 不是;似乎当我以编程方式进行推送/弹出时,UICollectionViewTransitionLayout使用的是 Apple 提供的原始转换布局,而不是我的自定义转换布局。

UICollectionViewTransitionLayout在这种情况下使用而不是我的自定义过渡布局是否正常?

如果这是正常行为,是否有办法在以编程方式推送/弹出时使用自定义转换来执行布局到布局转换UICollectionViewController

4

1 回答 1

4

这更像是一种解决方法,而不是正确的解决方案,但假设您想通过以下方式更改布局:

[self.collectionView setCollectionViewLayout:self.finalLayout animated:YES];

但是您想提供自己的 UICollectionViewTransitionLayout,您可以将上面的行替换为:

[self.collectionView startInteractiveTransitionToCollectionViewLayout:self.finalLayout completion:nil];
[self.collectionView finishInteractiveTransition];

和委托方法

- (UICollectionViewTransitionLayout*)collectionView:(UICollectionView *)collectionView transitionLayoutForOldLayout:(UICollectionViewLayout *)fromLayout newLayout:(UICollectionViewLayout *)toLayout

按预期被调用。

同样,我希望在不需要以这种奇怪的方式触发转换的情况下调用委托方法,但事实并非如此。

于 2014-04-11T09:47:54.877 回答