我一直在努力解决布局,视图控制器,集合视图和动画之间的转换。我现在的目标只是复制iOS Photos应用程序的一些功能:从具有多个堆栈的视图转换到仅具有1个堆栈的视图的视图。
所以我设置了一个包含4个堆栈的集合视图。您可以通过点击或捏合它们来转换到LineLayout。对我来说,棘手的部分是CollectionViewController与一个数据源(通知所有4个部分)与另一个数据源(仅显示一个部分)之间的转换。
以下是辅助方法中的转换代码:
- (UICollectionViewController *)nextViewControllerForIndexPath: (NSIndexPath *)indexPath
{
LineLayout *layout = [[LineLayout alloc] init];
APLGridCollectionViewController *nextCollectionViewController =
[[APLGridCollectionViewController alloc] initWithCollectionViewLayout:layout];
nextCollectionViewController.collectionView = self.collectionView;
nextCollectionViewController.collectionView.dataSource = nextCollectionViewController;
nextCollectionViewController.selectedSection = indexPath.section;
nextCollectionViewController.useLayoutToLayoutNavigationTransitions = YES;
nextCollectionViewController.title = @"Line Layout";
return nextCollectionViewController;
}
如果我没有将nextCollectionViewController的collectionView设置为self,则dataSource将保持设置为当前的CollectionViewController,并在下一个屏幕中显示所有4个部分及其单元格。
当前实现的问题是我得到以下异常:
2014-06-25 13:37:00.774 CollectionViewTransition[743:142104] *** Assertion failure in -[UICollectionViewData numberOfItemsBeforeSection:], /SourceCache/UIKit/UIKit-3232.3/UICollectionViewData.m:556
2014-06-25 13:37:00.775 CollectionViewTransition[743:142104] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'request for number of items before section 3 when there are only 1 sections in the collection view'
...暗示它在某处使用旧数据。那么,这样做的正确方法是什么?
不可否认,我正在尝试处理其他几个问题,例如回到堆栈布局屏幕将所有内容设置为一个堆栈,以及一些EXC_BAD_ACCESS事件,但我不会问7问题一下子。
Here's the project.这是我修改过的WWDC示例代码,就像最初的尝试一样。